From b1312ef7aa8180910873a792439dd25e47de393b Mon Sep 17 00:00:00 2001 From: iMeiji <361183736@qq.com> Date: Thu, 10 Aug 2017 00:16:01 +0800 Subject: [PATCH] fix bug --- .../main/java/com/meiji/toutiao/Register.java | 26 +++--- .../com/meiji/toutiao/RetrofitFactory.java | 3 + .../main/java/com/meiji/toutiao/RxBus.java | 3 + .../meiji/toutiao/adapter/DiffCallback.java | 3 + .../java/com/meiji/toutiao/api/IJokeApi.java | 7 +- .../joke/JokeCommentHeaderViewBinder.java | 31 ++++--- .../binder/joke/JokeCommentViewBinder.java | 18 ++-- .../binder/joke/JokeContentViewBinder.java | 85 +++++++++++-------- .../media/MediaArticleHeaderViewBinder.java | 33 ++----- .../media/MediaArticleImgViewBinder.java | 36 ++++---- .../media/MediaArticleTextViewBinder.java | 38 +++++---- .../binder/media/MediaChannelViewBinder.java | 19 +++-- .../binder/media/MediaWendaViewBinder.java | 41 +++++---- .../binder/news/NewsArticleImgViewBinder.java | 18 ++-- .../news/NewsArticleTextViewBinder.java | 19 +++-- .../news/NewsArticleVideoViewBinder.java | 19 +++-- .../binder/photo/PhotoArticleViewBinder.java | 19 +++-- .../video/VideoContentHeaderViewBinder.java | 19 +++-- .../wenda/WendaArticleOneImgViewBinder.java | 21 +++-- .../wenda/WendaArticleTextViewBinder.java | 21 +++-- .../wenda/WendaArticleThreeImgViewBinder.java | 21 +++-- .../wenda/WendaContentHeaderViewBinder.java | 14 +-- .../binder/wenda/WendaContentViewBinder.java | 19 +++-- .../toutiao/module/base/BaseListFragment.java | 5 +- .../module/joke/content/IJokeContent.java | 2 + .../joke/content/JokeContentPresenter.java | 27 ++++-- .../wenda/content/WendaContentPresenter.java | 7 +- app/src/main/res/layout/item_joke_content.xml | 17 ++++ .../res/layout/item_wenda_content_header.xml | 14 ++- app/src/main/res/menu/menu_joke_content.xml | 15 ++++ 30 files changed, 379 insertions(+), 241 deletions(-) create mode 100644 app/src/main/res/menu/menu_joke_content.xml diff --git a/app/src/main/java/com/meiji/toutiao/Register.java b/app/src/main/java/com/meiji/toutiao/Register.java index cce2035..e6ef70c 100644 --- a/app/src/main/java/com/meiji/toutiao/Register.java +++ b/app/src/main/java/com/meiji/toutiao/Register.java @@ -50,7 +50,7 @@ public class Register { - public static void registerNewsArticleItem(MultiTypeAdapter adapter) { + public static void registerNewsArticleItem(@NonNull MultiTypeAdapter adapter) { // 一个类型对应多个 ItemViewBinder adapter.register(MultiNewsArticleDataBean.class) .to(new NewsArticleImgViewBinder(), @@ -73,45 +73,45 @@ public static void registerNewsArticleItem(MultiTypeAdapter adapter) { adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerNewsCommentItem(MultiTypeAdapter adapter) { + public static void registerNewsCommentItem(@NonNull MultiTypeAdapter adapter) { adapter.register(NewsCommentBean.DataBean.CommentBean.class, new NewsCommentViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerVideoContentItem(MultiTypeAdapter adapter) { + public static void registerVideoContentItem(@NonNull MultiTypeAdapter adapter) { adapter.register(MultiNewsArticleDataBean.class, new VideoContentHeaderViewBinder()); adapter.register(NewsCommentBean.DataBean.CommentBean.class, new NewsCommentViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerVideoArticleItem(MultiTypeAdapter adapter) { + public static void registerVideoArticleItem(@NonNull MultiTypeAdapter adapter) { adapter.register(MultiNewsArticleDataBean.class, new NewsArticleVideoViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerJokeContentItem(MultiTypeAdapter adapter) { + public static void registerJokeContentItem(@NonNull MultiTypeAdapter adapter) { adapter.register(JokeContentBean.DataBean.GroupBean.class, new JokeContentViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerJokeCommentItem(MultiTypeAdapter adapter) { + public static void registerJokeCommentItem(@NonNull MultiTypeAdapter adapter) { adapter.register(JokeContentBean.DataBean.GroupBean.class, new JokeCommentHeaderViewBinder()); adapter.register(JokeCommentBean.DataBean.RecentCommentsBean.class, new JokeCommentViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerPhotoArticleItem(MultiTypeAdapter adapter) { + public static void registerPhotoArticleItem(@NonNull MultiTypeAdapter adapter) { adapter.register(PhotoArticleBean.DataBean.class, new PhotoArticleViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerWendaArticleItem(MultiTypeAdapter adapter) { + public static void registerWendaArticleItem(@NonNull MultiTypeAdapter adapter) { // 一个类型对应多个 ItemViewBinder adapter.register(WendaArticleDataBean.class) .to(new WendaArticleTextViewBinder(), @@ -138,18 +138,18 @@ public static void registerWendaArticleItem(MultiTypeAdapter adapter) { adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerWendaContentItem(MultiTypeAdapter adapter) { + public static void registerWendaContentItem(@NonNull MultiTypeAdapter adapter) { adapter.register(WendaContentBean.QuestionBean.class, new WendaContentHeaderViewBinder()); adapter.register(WendaContentBean.AnsListBean.class, new WendaContentViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerMediaChannelItem(MultiTypeAdapter adapter, IOnItemLongClickListener listener) { + public static void registerMediaChannelItem(@NonNull MultiTypeAdapter adapter, @NonNull IOnItemLongClickListener listener) { adapter.register(MediaChannelBean.class, new MediaChannelViewBinder(listener)); } - public static void registerSearchItem(MultiTypeAdapter adapter) { + public static void registerSearchItem(@NonNull MultiTypeAdapter adapter) { adapter.register(MultiNewsArticleDataBean.class) .to(new NewsArticleImgViewBinder(), new SearchArticleVideoViewBinder(), @@ -171,7 +171,7 @@ public static void registerSearchItem(MultiTypeAdapter adapter) { adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerMediaArticleItem(MultiTypeAdapter adapter) { + public static void registerMediaArticleItem(@NonNull MultiTypeAdapter adapter) { adapter.register(MultiMediaArticleBean.DataBean.class) .to(new MediaArticleImgViewBinder(), new MediaArticleVideoViewBinder(), @@ -194,7 +194,7 @@ public static void registerMediaArticleItem(MultiTypeAdapter adapter) { adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); } - public static void registerMediaWendaItem(MultiTypeAdapter adapter) { + public static void registerMediaWendaItem(@NonNull MultiTypeAdapter adapter) { adapter.register(MediaWendaBean.AnswerQuestionBean.class, new MediaWendaViewBinder()); adapter.register(LoadingBean.class, new LoadingViewBinder()); adapter.register(LoadingEndBean.class, new LoadingEndViewBinder()); diff --git a/app/src/main/java/com/meiji/toutiao/RetrofitFactory.java b/app/src/main/java/com/meiji/toutiao/RetrofitFactory.java index ecc8bb3..7533c3a 100644 --- a/app/src/main/java/com/meiji/toutiao/RetrofitFactory.java +++ b/app/src/main/java/com/meiji/toutiao/RetrofitFactory.java @@ -1,5 +1,7 @@ package com.meiji.toutiao; +import android.support.annotation.NonNull; + import com.franmontiel.persistentcookiejar.ClearableCookieJar; import com.franmontiel.persistentcookiejar.PersistentCookieJar; import com.franmontiel.persistentcookiejar.cache.SetCookieCache; @@ -65,6 +67,7 @@ public Response intercept(Chain chain) throws IOException { }; private volatile static Retrofit retrofit; + @NonNull public static Retrofit getRetrofit() { synchronized (Object) { if (retrofit == null) { diff --git a/app/src/main/java/com/meiji/toutiao/RxBus.java b/app/src/main/java/com/meiji/toutiao/RxBus.java index 2f1b319..be16212 100644 --- a/app/src/main/java/com/meiji/toutiao/RxBus.java +++ b/app/src/main/java/com/meiji/toutiao/RxBus.java @@ -23,14 +23,17 @@ private RxBus() { } + @NonNull public static RxBus getInstance() { return Holder.instance; } + @NonNull public Observable register(@NonNull Class clz) { return register(clz.getName()); } + @NonNull public Observable register(@NonNull Object tag) { List subjectList = subjectMapper.get(tag); if (null == subjectList) { diff --git a/app/src/main/java/com/meiji/toutiao/adapter/DiffCallback.java b/app/src/main/java/com/meiji/toutiao/adapter/DiffCallback.java index 7f3729d..7ca39c3 100644 --- a/app/src/main/java/com/meiji/toutiao/adapter/DiffCallback.java +++ b/app/src/main/java/com/meiji/toutiao/adapter/DiffCallback.java @@ -120,6 +120,9 @@ public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { case WENDA_ARTICLE: return ((WendaArticleDataBean) oldList.get(oldItemPosition)).getQuestionBean().getContent().equals( ((WendaArticleDataBean) newList.get(newItemPosition)).getQuestionBean().getContent()); + case WENDA_CONTENT: + return ((WendaContentBean.AnsListBean) oldList.get(oldItemPosition)).getAns_url().equals( + ((WendaContentBean.AnsListBean) newList.get(newItemPosition)).getAns_url()); case SEARCH: return ((SearchResultBean.DataBeanX) oldList.get(oldItemPosition)).getAbstractX().equals( ((SearchResultBean.DataBeanX) newList.get(newItemPosition)).getAbstractX()); diff --git a/app/src/main/java/com/meiji/toutiao/api/IJokeApi.java b/app/src/main/java/com/meiji/toutiao/api/IJokeApi.java index 5819537..b926f22 100644 --- a/app/src/main/java/com/meiji/toutiao/api/IJokeApi.java +++ b/app/src/main/java/com/meiji/toutiao/api/IJokeApi.java @@ -19,8 +19,11 @@ public interface IJokeApi { * 获取段子正文内容 * http://www.toutiao.com/api/article/feed/?category=essay_joke&as=A115C8457F69B85&cp=585F294B8845EE1 */ - @GET("api/article/feed/?category=essay_joke&as=A115C8457F69B85&cp=585F294B8845EE1") - Observable getJokeContent(); + @GET("api/article/feed/?category=essay_joke") + Observable getJokeContent( + @Query("max_behot_time") String maxBehotTime, + @Query("as") String as, + @Query("cp") String cp); /** * 获取段子评论 diff --git a/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentHeaderViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentHeaderViewBinder.java index 425427a..85556bd 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentHeaderViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentHeaderViewBinder.java @@ -3,16 +3,17 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.content.Intent; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import com.meiji.toutiao.ErrorAction; +import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.joke.JokeContentBean; import com.meiji.toutiao.module.base.BaseActivity; @@ -37,28 +38,36 @@ protected JokeCommentHeaderViewBinder.ViewHolder onCreateViewHolder(@NonNull Lay @Override protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final JokeContentBean.DataBean.GroupBean item) { + + final Context context = holder.itemView.getContext(); + try { String avatar_url = item.getUser().getAvatar_url(); String name = item.getUser().getName(); String text = item.getText(); String digg_count = item.getDigg_count() + ""; String bury_count = item.getBury_count() + ""; - String comment_count = item.getComment_count() + "评论"; + int comment_count = item.getComment_count(); - ImageLoader.loadCenterCrop(holder.itemView.getContext(), avatar_url, holder.iv_avatar, R.color.viewBackground); + ImageLoader.loadCenterCrop(context, avatar_url, holder.iv_avatar, R.color.viewBackground); holder.tv_username.setText(name); holder.tv_text.setText(text); holder.tv_digg_count.setText(digg_count); holder.tv_bury_count.setText(bury_count); - holder.tv_comment_count.setText(comment_count); + if (comment_count > 0) { + holder.tv_comment_count.setText(comment_count + "评论"); + } else { + holder.tv_comment_count.setVisibility(View.GONE); + } + holder.iv_dots.setVisibility(View.GONE); + holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - final BaseActivity context = (BaseActivity) holder.itemView.getContext(); final String content = item.getText(); final BottomSheetDialogFixed dialog = new BottomSheetDialogFixed(context); - dialog.setOwnerActivity(context); - View view = context.getLayoutInflater().inflate(R.layout.item_comment_action_sheet, null); + dialog.setOwnerActivity((BaseActivity) context); + View view = ((BaseActivity) context).getLayoutInflater().inflate(R.layout.item_comment_action_sheet, null); view.findViewById(R.id.layout_copy_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -72,11 +81,7 @@ public void onClick(View view) { view.findViewById(R.id.layout_share_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent shareIntent = new Intent() - .setAction(Intent.ACTION_SEND) - .setType("text/plain") - .putExtra(Intent.EXTRA_TEXT, content); - context.startActivity(Intent.createChooser(shareIntent, context.getString(R.string.share_to))); + IntentAction.send(context, content); dialog.dismiss(); } }); @@ -97,6 +102,7 @@ class ViewHolder extends RecyclerView.ViewHolder { private TextView tv_digg_count; private TextView tv_bury_count; private TextView tv_comment_count; + private ImageView iv_dots; ViewHolder(View itemView) { super(itemView); @@ -106,6 +112,7 @@ class ViewHolder extends RecyclerView.ViewHolder { this.tv_digg_count = itemView.findViewById(R.id.tv_digg_count); this.tv_bury_count = itemView.findViewById(R.id.tv_bury_count); this.tv_comment_count = itemView.findViewById(R.id.tv_comment_count); + this.iv_dots = itemView.findViewById(R.id.iv_dots); } } } diff --git a/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentViewBinder.java index 27f931d..77c4a01 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/joke/JokeCommentViewBinder.java @@ -3,7 +3,6 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.content.Intent; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v7.widget.RecyclerView; @@ -13,6 +12,7 @@ import android.widget.TextView; import com.meiji.toutiao.ErrorAction; +import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.joke.JokeCommentBean; import com.meiji.toutiao.module.base.BaseActivity; @@ -37,24 +37,26 @@ protected JokeCommentViewBinder.ViewHolder onCreateViewHolder(@NonNull LayoutInf @Override protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final JokeCommentBean.DataBean.RecentCommentsBean item) { + + final Context context = holder.itemView.getContext(); + try { String iv_avatar = item.getUser_profile_image_url(); String tv_username = item.getUser_name(); String tv_text = item.getText(); String tv_likes = item.getDigg_count() + "赞"; - ImageLoader.loadCenterCrop(holder.itemView.getContext(), iv_avatar, holder.iv_avatar, R.color.viewBackground); + ImageLoader.loadCenterCrop(context, iv_avatar, holder.iv_avatar, R.color.viewBackground); holder.tv_username.setText(tv_username); holder.tv_text.setText(tv_text); holder.tv_likes.setText(tv_likes); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - final BaseActivity context = (BaseActivity) holder.itemView.getContext(); final String content = item.getText(); final BottomSheetDialogFixed dialog = new BottomSheetDialogFixed(context); - dialog.setOwnerActivity(context); - View view = context.getLayoutInflater().inflate(R.layout.item_comment_action_sheet, null); + dialog.setOwnerActivity((BaseActivity) context); + View view = ((BaseActivity) context).getLayoutInflater().inflate(R.layout.item_comment_action_sheet, null); view.findViewById(R.id.layout_copy_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -68,11 +70,7 @@ public void onClick(View view) { view.findViewById(R.id.layout_share_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent shareIntent = new Intent() - .setAction(Intent.ACTION_SEND) - .setType("text/plain") - .putExtra(Intent.EXTRA_TEXT, content); - context.startActivity(Intent.createChooser(shareIntent, context.getString(R.string.share_to))); + IntentAction.send(context, content); dialog.dismiss(); } }); diff --git a/app/src/main/java/com/meiji/toutiao/binder/joke/JokeContentViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/joke/JokeContentViewBinder.java index 9080e8c..76e32ad 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/joke/JokeContentViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/joke/JokeContentViewBinder.java @@ -3,24 +3,30 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.content.Intent; import android.support.annotation.NonNull; -import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.Snackbar; +import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; +import android.view.Gravity; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; +import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.joke.JokeContentBean; -import com.meiji.toutiao.module.base.BaseActivity; import com.meiji.toutiao.module.joke.comment.JokeCommentActivity; import com.meiji.toutiao.util.ImageLoader; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -38,57 +44,60 @@ protected JokeContentViewBinder.ViewHolder onCreateViewHolder(@NonNull LayoutInf @Override protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final JokeContentBean.DataBean.GroupBean item) { + + final Context context = holder.itemView.getContext(); + try { String avatar_url = item.getUser().getAvatar_url(); String name = item.getUser().getName(); String text = item.getText(); String digg_count = item.getDigg_count() + ""; String bury_count = item.getBury_count() + ""; - String comment_count = item.getComment_count() + "评论"; + int comment_count = item.getComment_count(); - ImageLoader.loadCenterCrop(holder.itemView.getContext(), avatar_url, holder.iv_avatar, R.color.viewBackground); + ImageLoader.loadCenterCrop(context, avatar_url, holder.iv_avatar, R.color.viewBackground); holder.tv_username.setText(name); holder.tv_text.setText(text); holder.tv_digg_count.setText(digg_count); holder.tv_bury_count.setText(bury_count); - holder.tv_comment_count.setText(comment_count); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - JokeCommentActivity.launch(item); - } - }); - holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - final BaseActivity context = (BaseActivity) holder.itemView.getContext(); - final String content = item.getText(); - final BottomSheetDialog dialog = new BottomSheetDialog(context); - View view = context.getLayoutInflater().inflate(R.layout.item_comment_action_sheet, null); - view.findViewById(R.id.layout_copy_text).setOnClickListener(new View.OnClickListener() { + if (comment_count > 0) { + holder.tv_comment_count.setText(comment_count + "评论"); + } else { + holder.tv_comment_count.setVisibility(View.GONE); + } + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { @Override - public void onClick(View view) { - ClipboardManager copy = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clipData = ClipData.newPlainText("text", content); - copy.setPrimaryClip(clipData); - Snackbar.make(holder.itemView, R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT).show(); - dialog.dismiss(); + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + JokeCommentActivity.launch(item); } }); - view.findViewById(R.id.layout_share_text).setOnClickListener(new View.OnClickListener() { + + holder.iv_dots.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + PopupMenu popupMenu = new PopupMenu(context, + holder.iv_dots, Gravity.END, 0, R.style.MyPopupMenu); + popupMenu.inflate(R.menu.menu_joke_content); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override - public void onClick(View view) { - Intent shareIntent = new Intent() - .setAction(Intent.ACTION_SEND) - .setType("text/plain") - .putExtra(Intent.EXTRA_TEXT, content); - context.startActivity(Intent.createChooser(shareIntent, context.getString(R.string.share_to))); - dialog.dismiss(); + public boolean onMenuItemClick(MenuItem menu) { + int itemId = menu.getItemId(); + if (itemId == R.id.action_copy) { + ClipboardManager copy = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clipData = ClipData.newPlainText("text", item.getText()); + copy.setPrimaryClip(clipData); + Snackbar.make(holder.itemView, R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT).show(); + } + if (itemId == R.id.action_comment_share) { + IntentAction.send(context, item.getText()); + } + return false; } }); - dialog.setContentView(view); - dialog.show(); - return false; + popupMenu.show(); } }); } catch (Exception e) { @@ -104,6 +113,7 @@ class ViewHolder extends RecyclerView.ViewHolder { private TextView tv_digg_count; private TextView tv_bury_count; private TextView tv_comment_count; + private ImageView iv_dots; ViewHolder(View itemView) { super(itemView); @@ -113,6 +123,7 @@ class ViewHolder extends RecyclerView.ViewHolder { this.tv_digg_count = itemView.findViewById(R.id.tv_digg_count); this.tv_bury_count = itemView.findViewById(R.id.tv_bury_count); this.tv_comment_count = itemView.findViewById(R.id.tv_comment_count); + this.iv_dots = itemView.findViewById(R.id.iv_dots); } } } diff --git a/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleHeaderViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleHeaderViewBinder.java index b8a596c..08bd55e 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleHeaderViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleHeaderViewBinder.java @@ -23,9 +23,6 @@ import java.util.concurrent.TimeUnit; -import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; @@ -49,10 +46,10 @@ protected MediaArticleHeaderViewBinder.ViewHolder onCreateViewHolder(@NonNull La @Override protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final MediaProfileBean.DataBean item) { - try { - final Context context = holder.itemView.getContext(); + final Context context = holder.itemView.getContext(); + try { // 设置头条号信息 String imgUrl = item.getBg_img_url(); if (!TextUtils.isEmpty(imgUrl)) { @@ -158,26 +155,12 @@ public ViewHolder(View itemView) { } private void setIsSub(final String mediaId) { - Observable - .create(new ObservableOnSubscribe() { - @Override - public void subscribe(@NonNull ObservableEmitter e) throws Exception { - boolean isExist = dao.queryIsExist(mediaId); - e.onNext(isExist); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(@NonNull Boolean isExist) throws Exception { - if (isExist) { - tv_is_sub.setText("已订阅"); - } else { - tv_is_sub.setText("订阅"); - } - } - }, ErrorAction.error()); + boolean isExist = dao.queryIsExist(mediaId); + if (isExist) { + tv_is_sub.setText("已订阅"); + } else { + tv_is_sub.setText("订阅"); + } } } } diff --git a/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleImgViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleImgViewBinder.java index 548f414..61fa4a0 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleImgViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleImgViewBinder.java @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -24,7 +25,9 @@ import com.meiji.toutiao.util.TimeUtil; import java.util.List; +import java.util.concurrent.TimeUnit; +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -74,21 +77,24 @@ protected void onBindViewHolder(@NonNull final MediaArticleImgViewBinder.ViewHol holder.tv_abstract.setText(abstractX); holder.tv_extra.setText(readCount + " - " + countmmentCount + " - " + time); final String finalImgUrl = imgUrl; - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MultiNewsArticleDataBean bean = new MultiNewsArticleDataBean(); - bean.setTitle(item.getTitle()); - bean.setDisplay_url(item.getDisplay_url()); - bean.setMedia_name(item.getSource()); - bean.setGroup_id(item.getGroup_id()); - bean.setItem_id(item.getItem_id()); - MultiNewsArticleDataBean.MediaInfoBean mediaInfo = new MultiNewsArticleDataBean.MediaInfoBean(); - mediaInfo.setMedia_id(item.getMedia_id() + ""); - bean.setMedia_info(mediaInfo); - NewsContentActivity.launch(bean, finalImgUrl); - } - }); + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + MultiNewsArticleDataBean bean = new MultiNewsArticleDataBean(); + bean.setTitle(item.getTitle()); + bean.setDisplay_url(item.getDisplay_url()); + bean.setMedia_name(item.getSource()); + bean.setGroup_id(item.getGroup_id()); + bean.setItem_id(item.getItem_id()); + MultiNewsArticleDataBean.MediaInfoBean mediaInfo = new MultiNewsArticleDataBean.MediaInfoBean(); + mediaInfo.setMedia_id(item.getMedia_id() + ""); + bean.setMedia_info(mediaInfo); + NewsContentActivity.launch(bean, finalImgUrl); + } + }); + holder.iv_dots.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleTextViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleTextViewBinder.java index 3f3b299..64f7d26 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleTextViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/media/MediaArticleTextViewBinder.java @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -21,6 +22,9 @@ import com.meiji.toutiao.module.news.content.NewsContentActivity; import com.meiji.toutiao.util.TimeUtil; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -55,21 +59,25 @@ protected void onBindViewHolder(@NonNull final MediaArticleTextViewBinder.ViewHo holder.tv_title.setText(title); holder.tv_abstract.setText(abstractX); holder.tv_extra.setText(readCount + " - " + countmmentCount + " - " + time); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MultiNewsArticleDataBean bean = new MultiNewsArticleDataBean(); - bean.setTitle(item.getTitle()); - bean.setDisplay_url(item.getDisplay_url()); - bean.setMedia_name(item.getSource()); - MultiNewsArticleDataBean.MediaInfoBean mediaInfo = new MultiNewsArticleDataBean.MediaInfoBean(); - mediaInfo.setMedia_id(item.getMedia_id() + ""); - bean.setMedia_info(mediaInfo); - bean.setGroup_id(item.getGroup_id()); - bean.setItem_id(item.getItem_id()); - NewsContentActivity.launch(bean); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + MultiNewsArticleDataBean bean = new MultiNewsArticleDataBean(); + bean.setTitle(item.getTitle()); + bean.setDisplay_url(item.getDisplay_url()); + bean.setMedia_name(item.getSource()); + MultiNewsArticleDataBean.MediaInfoBean mediaInfo = new MultiNewsArticleDataBean.MediaInfoBean(); + mediaInfo.setMedia_id(item.getMedia_id() + ""); + bean.setMedia_info(mediaInfo); + bean.setGroup_id(item.getGroup_id()); + bean.setItem_id(item.getItem_id()); + NewsContentActivity.launch(bean); + } + }); + holder.iv_dots.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/app/src/main/java/com/meiji/toutiao/binder/media/MediaChannelViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/media/MediaChannelViewBinder.java index b0081db..33d45f2 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/media/MediaChannelViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/media/MediaChannelViewBinder.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.media.MediaChannelBean; @@ -16,6 +17,9 @@ import com.meiji.toutiao.util.ImageLoader; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -45,12 +49,15 @@ protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final ImageLoader.loadCenterCrop(context, url, holder.cv_avatar, R.color.viewBackground); holder.tv_mediaName.setText(item.getName()); holder.tv_descText.setText(item.getDescText()); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MediaHomeActivity.launch(item.getId()); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + MediaHomeActivity.launch(item.getId()); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/media/MediaWendaViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/media/MediaWendaViewBinder.java index f15d189..0fc2983 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/media/MediaWendaViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/media/MediaWendaViewBinder.java @@ -12,6 +12,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -21,7 +22,9 @@ import com.meiji.toutiao.util.ImageLoader; import java.util.List; +import java.util.concurrent.TimeUnit; +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -62,23 +65,27 @@ protected void onBindViewHolder(@NonNull final MediaWendaViewBinder.ViewHolder h holder.tv_title.setText(title); holder.tv_abstract.setText(abstractX); holder.tv_extra.setText(readCount + " - " + time); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - WendaContentBean.AnsListBean ansBean = new WendaContentBean.AnsListBean(); - WendaContentBean.AnsListBean.ShareDataBeanX shareBean = new WendaContentBean.AnsListBean.ShareDataBeanX(); - WendaContentBean.AnsListBean.UserBeanX userBean = new WendaContentBean.AnsListBean.UserBeanX(); - ansBean.setTitle(title); - ansBean.setQid(item.getQuestion().getQid()); - ansBean.setAnsid(item.getQuestion().getQid()); - shareBean.setShare_url(item.getAnswer().getWap_url()); - userBean.setUname(item.getAnswer().getUser().getUname()); - userBean.setAvatar_url(item.getAnswer().getUser().getAvatar_url()); - ansBean.setShare_data(shareBean); - ansBean.setUser(userBean); - WendaDetailActivity.launch(ansBean); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + WendaContentBean.AnsListBean ansBean = new WendaContentBean.AnsListBean(); + WendaContentBean.AnsListBean.ShareDataBeanX shareBean = new WendaContentBean.AnsListBean.ShareDataBeanX(); + WendaContentBean.AnsListBean.UserBeanX userBean = new WendaContentBean.AnsListBean.UserBeanX(); + ansBean.setTitle(title); + ansBean.setQid(item.getQuestion().getQid()); + ansBean.setAnsid(item.getQuestion().getQid()); + shareBean.setShare_url(item.getAnswer().getWap_url()); + userBean.setUname(item.getAnswer().getUser().getUname()); + userBean.setAvatar_url(item.getAnswer().getUser().getAvatar_url()); + ansBean.setShare_data(shareBean); + ansBean.setUser(userBean); + WendaDetailActivity.launch(ansBean); + } + }); + holder.iv_dots.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleImgViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleImgViewBinder.java index 38ad148..9d397d9 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleImgViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleImgViewBinder.java @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -23,7 +24,9 @@ import com.meiji.toutiao.widget.CircleImageView; import java.util.List; +import java.util.concurrent.TimeUnit; +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -94,13 +97,16 @@ public boolean onMenuItemClick(MenuItem menu) { popupMenu.show(); } }); + final String finalImgUrl = imgUrl; - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - NewsContentActivity.launch(item, finalImgUrl); - } - }); + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + NewsContentActivity.launch(item, finalImgUrl); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleTextViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleTextViewBinder.java index 3497343..e559df0 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleTextViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleTextViewBinder.java @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -22,6 +23,9 @@ import com.meiji.toutiao.util.TimeUtil; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -84,12 +88,15 @@ public boolean onMenuItemClick(MenuItem menu) { popupMenu.show(); } }); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - NewsContentActivity.launch(item); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + NewsContentActivity.launch(item); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleVideoViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleVideoViewBinder.java index a9270a5..2523d4d 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleVideoViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/news/NewsArticleVideoViewBinder.java @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -22,6 +23,9 @@ import com.meiji.toutiao.util.TimeUtil; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -100,12 +104,15 @@ public boolean onMenuItemClick(MenuItem menu) { popupMenu.show(); } }); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - VideoContentActivity.launch(item); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + VideoContentActivity.launch(item); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/photo/PhotoArticleViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/photo/PhotoArticleViewBinder.java index c19bd77..129af83 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/photo/PhotoArticleViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/photo/PhotoArticleViewBinder.java @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.IntentAction; import com.meiji.toutiao.R; @@ -22,6 +23,9 @@ import com.meiji.toutiao.util.TimeUtil; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -101,12 +105,15 @@ public boolean onMenuItemClick(MenuItem menu) { popupMenu.show(); } }); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PhotoContentActivity.launch(item); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + PhotoContentActivity.launch(item); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/video/VideoContentHeaderViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/video/VideoContentHeaderViewBinder.java index 2cfbcba..49c767f 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/video/VideoContentHeaderViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/video/VideoContentHeaderViewBinder.java @@ -9,6 +9,7 @@ import android.widget.LinearLayout; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.news.MultiNewsArticleDataBean; @@ -16,6 +17,9 @@ import com.meiji.toutiao.util.ImageLoader; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -57,12 +61,15 @@ protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull MultiNewsAr holder.tv_tv_video_duration_str.setText("时长 " + tv_video_time + " | " + tv_comment_count + "评论"); holder.tv_abstract.setText(abstractX); holder.tv_source.setText(source); - holder.media_layout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MediaHomeActivity.launch(media_id); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + MediaHomeActivity.launch(media_id); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleOneImgViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleOneImgViewBinder.java index 7320208..f075e27 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleOneImgViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleOneImgViewBinder.java @@ -10,6 +10,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.wenda.WendaArticleDataBean; @@ -17,6 +18,9 @@ import com.meiji.toutiao.util.ImageLoader; import com.meiji.toutiao.util.TimeUtil; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -42,7 +46,7 @@ protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final ImageLoader.loadCenterCrop(context, url, holder.iv_image_big, R.color.viewBackground); final String tv_title = item.getQuestionBean().getTitle(); - String tv_answer_count = item.getQuestionBean().getNormal_ans_count() + "回答"; + String tv_answer_count = item.getQuestionBean().getNormal_ans_count() + item.getQuestionBean().getNice_ans_count() + "回答"; String tv_datetime = item.getQuestionBean().getCreate_time() + ""; if (!TextUtils.isEmpty(tv_datetime)) { tv_datetime = TimeUtil.getTimeStampAgo(tv_datetime); @@ -50,12 +54,15 @@ protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final holder.tv_title.setText(tv_title); holder.tv_answer_count.setText(tv_answer_count); holder.tv_time.setText(tv_datetime); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - WendaContentActivity.launch(item.getQuestionBean().getQid() + ""); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + WendaContentActivity.launch(item.getQuestionBean().getQid() + ""); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleTextViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleTextViewBinder.java index 2126744..99d21be 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleTextViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleTextViewBinder.java @@ -8,12 +8,16 @@ import android.view.ViewGroup; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.wenda.WendaArticleDataBean; import com.meiji.toutiao.module.wenda.content.WendaContentActivity; import com.meiji.toutiao.util.TimeUtil; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -33,7 +37,7 @@ protected WendaArticleTextViewBinder.ViewHolder onCreateViewHolder(@NonNull Layo protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final WendaArticleDataBean item) { try { String tv_title = item.getQuestionBean().getTitle(); - String tv_answer_count = item.getQuestionBean().getNormal_ans_count() + "回答"; + String tv_answer_count = item.getQuestionBean().getNormal_ans_count() + item.getQuestionBean().getNice_ans_count() + "回答"; String tv_datetime = item.getQuestionBean().getCreate_time() + ""; if (!TextUtils.isEmpty(tv_datetime)) { tv_datetime = TimeUtil.getTimeStampAgo(tv_datetime); @@ -43,12 +47,15 @@ protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final Wenda holder.tv_answer_count.setText(tv_answer_count); holder.tv_time.setText(tv_datetime); holder.tv_content.setText(tv_content); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - WendaContentActivity.launch(item.getQuestionBean().getQid() + ""); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + WendaContentActivity.launch(item.getQuestionBean().getQid() + ""); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleThreeImgViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleThreeImgViewBinder.java index 77cd9cc..21d332c 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleThreeImgViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaArticleThreeImgViewBinder.java @@ -10,6 +10,7 @@ import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.wenda.WendaArticleDataBean; @@ -17,6 +18,9 @@ import com.meiji.toutiao.util.ImageLoader; import com.meiji.toutiao.util.TimeUtil; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -59,7 +63,7 @@ protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final Wenda } String tv_title = item.getQuestionBean().getTitle(); - String tv_answer_count = item.getQuestionBean().getNormal_ans_count() + "回答"; + String tv_answer_count = item.getQuestionBean().getNormal_ans_count() + item.getQuestionBean().getNice_ans_count() + "回答"; String tv_datetime = item.getQuestionBean().getCreate_time() + ""; if (!TextUtils.isEmpty(tv_datetime)) { tv_datetime = TimeUtil.getTimeStampAgo(tv_datetime); @@ -67,12 +71,15 @@ protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final Wenda holder.tv_title.setText(tv_title); holder.tv_answer_count.setText(tv_answer_count); holder.tv_time.setText(tv_datetime); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - WendaContentActivity.launch(item.getQuestionBean().getQid() + ""); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + WendaContentActivity.launch(item.getQuestionBean().getQid() + ""); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentHeaderViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentHeaderViewBinder.java index f1d3b74..615337b 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentHeaderViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentHeaderViewBinder.java @@ -5,13 +5,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.wenda.WendaContentBean; -import com.meiji.toutiao.util.ImageLoader; +import com.meiji.toutiao.util.SettingUtil; import me.drakeet.multitype.ItemViewBinder; @@ -34,18 +33,13 @@ protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final Wenda String tv_title = item.getTitle(); String tv_abstract = item.getContent().getText(); - if (item.getContent().getThumb_image_list().size() > 0) { - holder.iv_image.setVisibility(View.VISIBLE); - String url = item.getContent().getThumb_image_list().get(0).getUrl(); - ImageLoader.loadCenterCrop(holder.itemView.getContext(), url, holder.iv_image, R.color.viewBackground); - } - - String tv_answer_count = item.getNormal_ans_count() + " 回答"; + String tv_answer_count = item.getNormal_ans_count() + item.getNice_ans_count() + " 回答"; String tv_follow_count = item.getFollow_count() + " 关注"; holder.tv_title.setText(tv_title); holder.tv_abstract.setText(tv_abstract); holder.tv_answer_count.setText(tv_answer_count); holder.tv_follow_count.setText(tv_follow_count); + holder.itemView.setBackgroundColor(SettingUtil.getInstance().getColor()); } catch (Exception e) { ErrorAction.print(e); } @@ -55,7 +49,6 @@ public class ViewHolder extends RecyclerView.ViewHolder { private TextView tv_title; private TextView tv_abstract; - private ImageView iv_image; private TextView tv_answer_count; private TextView tv_follow_count; @@ -63,7 +56,6 @@ public ViewHolder(View itemView) { super(itemView); this.tv_title = itemView.findViewById(R.id.tv_title); this.tv_abstract = itemView.findViewById(R.id.tv_abstract); - this.iv_image = itemView.findViewById(R.id.iv_image); this.tv_answer_count = itemView.findViewById(R.id.tv_answer_count); this.tv_follow_count = itemView.findViewById(R.id.tv_follow_count); } diff --git a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentViewBinder.java b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentViewBinder.java index 8de25eb..f029f1d 100644 --- a/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentViewBinder.java +++ b/app/src/main/java/com/meiji/toutiao/binder/wenda/WendaContentViewBinder.java @@ -7,6 +7,7 @@ import android.view.ViewGroup; import android.widget.TextView; +import com.jakewharton.rxbinding2.view.RxView; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.wenda.WendaContentBean; @@ -14,6 +15,9 @@ import com.meiji.toutiao.util.ImageLoader; import com.meiji.toutiao.widget.CircleImageView; +import java.util.concurrent.TimeUnit; + +import io.reactivex.functions.Consumer; import me.drakeet.multitype.ItemViewBinder; /** @@ -40,12 +44,15 @@ protected void onBindViewHolder(@NonNull ViewHolder holder, @NonNull final Wenda holder.tv_user_name.setText(tv_user_name); holder.tv_like_count.setText(tv_like_count); holder.tv_abstract.setText(tv_abstract); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - WendaDetailActivity.launch(item); - } - }); + + RxView.clicks(holder.itemView) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Object o) throws Exception { + WendaDetailActivity.launch(item); + } + }); } catch (Exception e) { ErrorAction.print(e); } diff --git a/app/src/main/java/com/meiji/toutiao/module/base/BaseListFragment.java b/app/src/main/java/com/meiji/toutiao/module/base/BaseListFragment.java index e970144..39377a0 100644 --- a/app/src/main/java/com/meiji/toutiao/module/base/BaseListFragment.java +++ b/app/src/main/java/com/meiji/toutiao/module/base/BaseListFragment.java @@ -1,10 +1,10 @@ package com.meiji.toutiao.module.base; -import android.support.design.widget.Snackbar; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; +import android.widget.Toast; import com.meiji.toutiao.R; import com.meiji.toutiao.bean.LoadingEndBean; @@ -62,7 +62,7 @@ public void run() { @Override public void onShowNetError() { - Snackbar.make(swipeRefreshLayout, R.string.network_error, Snackbar.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), R.string.network_error, Toast.LENGTH_SHORT).show(); getActivity().runOnUiThread(new Runnable() { @Override public void run() { @@ -82,7 +82,6 @@ public void onResume() { @Override public void onShowNoMore() { -// Snackbar.make(swipeRefreshLayout, R.string.no_more_content, Snackbar.LENGTH_SHORT).show(); getActivity().runOnUiThread(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/com/meiji/toutiao/module/joke/content/IJokeContent.java b/app/src/main/java/com/meiji/toutiao/module/joke/content/IJokeContent.java index 0dcf829..13160c0 100644 --- a/app/src/main/java/com/meiji/toutiao/module/joke/content/IJokeContent.java +++ b/app/src/main/java/com/meiji/toutiao/module/joke/content/IJokeContent.java @@ -33,5 +33,7 @@ interface Presenter extends IBasePresenter { * 设置适配器 */ void doSetAdapter(); + + void doShowNoMore(); } } diff --git a/app/src/main/java/com/meiji/toutiao/module/joke/content/JokeContentPresenter.java b/app/src/main/java/com/meiji/toutiao/module/joke/content/JokeContentPresenter.java index 23341a2..d9dc7b2 100644 --- a/app/src/main/java/com/meiji/toutiao/module/joke/content/JokeContentPresenter.java +++ b/app/src/main/java/com/meiji/toutiao/module/joke/content/JokeContentPresenter.java @@ -1,12 +1,16 @@ package com.meiji.toutiao.module.joke.content; +import com.meiji.toutiao.Constant; import com.meiji.toutiao.ErrorAction; import com.meiji.toutiao.RetrofitFactory; import com.meiji.toutiao.api.IJokeApi; import com.meiji.toutiao.bean.joke.JokeContentBean; +import com.meiji.toutiao.util.TimeUtil; +import com.meiji.toutiao.util.ToutiaoUtil; import java.util.ArrayList; import java.util.List; +import java.util.Map; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; @@ -22,19 +26,19 @@ class JokeContentPresenter implements IJokeContent.Presenter { private IJokeContent.View view; private List groupList = new ArrayList<>(); + private String time; JokeContentPresenter(IJokeContent.View view) { this.view = view; + this.time = TimeUtil.getCurrentTimeStamp(); } @Override public void doLoadData() { - // 释放内存 - if (groupList.size() > 100) { - groupList.clear(); - } - RetrofitFactory.getRetrofit().create(IJokeApi.class).getJokeContent() + Map map = ToutiaoUtil.getAsCp(); + + RetrofitFactory.getRetrofit().create(IJokeApi.class).getJokeContent(time, map.get(Constant.AS), map.get(Constant.CP)) .subscribeOn(Schedulers.io()) .map(new Function>() { @Override @@ -43,6 +47,7 @@ public List apply(@NonNull JokeContentBean j for (JokeContentBean.DataBean dataBean : data) { groupList.add(dataBean.getGroup()); } + time = jokeContentBean.getNext().getMax_behot_time() + ""; return groupList; } }) @@ -51,7 +56,11 @@ public List apply(@NonNull JokeContentBean j .subscribe(new Consumer>() { @Override public void accept(@NonNull List groupBeen) throws Exception { - doSetAdapter(); + if (groupBeen.size() > 0) { + doSetAdapter(); + } else { + doShowNoMore(); + } } }, ErrorAction.error()); } @@ -81,4 +90,10 @@ public void doShowNetError() { view.onHideLoading(); view.onShowNetError(); } + + @Override + public void doShowNoMore() { + view.onHideLoading(); + view.onShowNoMore(); + } } diff --git a/app/src/main/java/com/meiji/toutiao/module/wenda/content/WendaContentPresenter.java b/app/src/main/java/com/meiji/toutiao/module/wenda/content/WendaContentPresenter.java index 0c0f6cd..6ebf1d9 100644 --- a/app/src/main/java/com/meiji/toutiao/module/wenda/content/WendaContentPresenter.java +++ b/app/src/main/java/com/meiji/toutiao/module/wenda/content/WendaContentPresenter.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; @@ -56,7 +57,7 @@ public void doLoadData(String qid) { RetrofitFactory.getRetrofit().create(IMobileWendaApi.class).getWendaNiceContent(qid) .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(@NonNull WendaContentBean wendaContentBean) throws Exception { @@ -80,7 +81,7 @@ public void doLoadMoreData() { RetrofitFactory.getRetrofit().create(IMobileWendaApi.class) .getWendaNiceContentLoadMore(qid, niceOffset) .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(@NonNull WendaContentBean wendaContentBean) throws Exception { @@ -98,7 +99,7 @@ public void accept(@NonNull Throwable throwable) throws Exception { RetrofitFactory.getRetrofit().create(IMobileWendaApi.class) .getWendaNormalContentLoadMore(qid, normalOffset) .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(@NonNull WendaContentBean wendaContentBean) throws Exception { diff --git a/app/src/main/res/layout/item_joke_content.xml b/app/src/main/res/layout/item_joke_content.xml index c060a06..ae66460 100644 --- a/app/src/main/res/layout/item_joke_content.xml +++ b/app/src/main/res/layout/item_joke_content.xml @@ -36,10 +36,27 @@ android:layout_gravity="center" android:layout_marginLeft="8dp" android:ellipsize="end" + android:maxLength="30" android:maxLines="1" android:text="小恢恢的帽子" android:textAppearance="@style/TextAppearance.AppCompat.Caption"/> + + + + + + android:textAppearance="@style/TextAppearance.AppCompat.Title" + android:textColor="@color/White"/> - - diff --git a/app/src/main/res/menu/menu_joke_content.xml b/app/src/main/res/menu/menu_joke_content.xml new file mode 100644 index 0000000..48da7eb --- /dev/null +++ b/app/src/main/res/menu/menu_joke_content.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file