diff --git a/app/src/main/java/com/gh/common/util/CollectionUtils.kt b/app/src/main/java/com/gh/common/util/CollectionUtils.kt index 544a410773..ecd15794a1 100644 --- a/app/src/main/java/com/gh/common/util/CollectionUtils.kt +++ b/app/src/main/java/com/gh/common/util/CollectionUtils.kt @@ -46,7 +46,7 @@ object CollectionUtils { try { val string = e.response()?.errorBody()?.string() val errorBody = JSONObject(string) - if (errorBody.getInt("status") == 40031) { + if (errorBody.getInt("status") == 403009) { listener.onSuccess() return } diff --git a/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java b/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java index 9f48f5558e..902e4f7d39 100644 --- a/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java +++ b/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java @@ -93,7 +93,7 @@ public class ToolBoxActivity extends BaseActivity implements SwipeRefreshLayout. if (newState == RecyclerView.SCROLL_STATE_IDLE && mLayoutManager.findLastVisibleItemPosition() + 1 == mRvAdapter.getItemCount()) { if (!mRvAdapter.isOver() && !mRvAdapter.isLoading() && !mRvAdapter.isNetworkError()) { - mRvAdapter.loadData(mIsSearch, mRvAdapter.dataSize()); + mRvAdapter.loadData(mIsSearch); } } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java index 2950b90332..6b81f6acea 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java @@ -43,6 +43,8 @@ public class CommentDetailAdapter extends BaseRecyclerAdapter { private boolean mIsLoading; private boolean mIsNetworkError; + private int mPage; + public CommentDetailAdapter(Context context, String commentId, OnCommentCallBackListener commentCallBackListener, View noData, RecyclerView recyclerView) { @@ -50,17 +52,19 @@ public class CommentDetailAdapter extends BaseRecyclerAdapter { mCommentId = commentId; mOnCommentCallBackListener = commentCallBackListener; mCommentList = new ArrayList<>(); + mPage = 1; mDoData = noData; mRecyclerView = recyclerView; - loadData(0); + loadData(); } - public void loadData(int offset) { + public void loadData() { + if (mIsLoading) return; mIsLoading = true; RetrofitManager.getInstance(mContext).getApi() - .getCommentTrace(mCommentId, 20, offset) + .getCommentTrace(mCommentId, 20, mPage) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -72,12 +76,11 @@ public class CommentDetailAdapter extends BaseRecyclerAdapter { if (response.size() < 20) { mIsOver = true; } - - mIsLoading = false; - mDoData.setVisibility(View.GONE); mRecyclerView.setVisibility(View.VISIBLE); notifyItemRangeChanged(0, getItemCount() - 1); + mPage++; + mIsLoading = false; } @Override diff --git a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java index 8919fe8fa6..9bc8719a44 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java @@ -63,6 +63,8 @@ public class GameNewsAdapter extends BaseRecyclerAdapter { private boolean isNetworkError; private boolean isOpenKeyBoard; + private int mPage; + public GameNewsAdapter(Context context, List tList, RecyclerView mGameNewsList, String id, String type, String entrance, LinearLayout noDataLl) { super(context); @@ -81,11 +83,12 @@ public class GameNewsAdapter extends BaseRecyclerAdapter { isRemove = false; isNetworkError = false; isOpenKeyBoard = false; + mPage = 1; - addList(0); + addList(); } - public void addList(final int offset) { + public void addList() { if (isLoading) { return; } @@ -94,10 +97,10 @@ public class GameNewsAdapter extends BaseRecyclerAdapter { Observable> observable; if (mContext.getString(R.string.news_all).equals(mNewsType)) { observable = RetrofitManager.getInstance(mContext).getApi().getGameNews( - UrlFilterUtils.getFilterQuery("game_id", mGameId), 20, offset); + UrlFilterUtils.getFilterQuery("game_id", mGameId), 20, mPage); } else { observable = RetrofitManager.getInstance(mContext).getApi().getGameNews( - UrlFilterUtils.getFilterQuery("game_id", mGameId, "type", mNewsType), 20, offset); + UrlFilterUtils.getFilterQuery("game_id", mGameId, "type", mNewsType), 20, mPage); } observable.subscribeOn(Schedulers.io()) .map(new Func1, List>() { @@ -112,7 +115,7 @@ public class GameNewsAdapter extends BaseRecyclerAdapter { .subscribe(new Response>() { @Override public void onResponse(List response) { - if (offset == 0) { + if (mPage == 1) { mNewsList.clear(); } @@ -129,7 +132,7 @@ public class GameNewsAdapter extends BaseRecyclerAdapter { notifyItemChanged(getItemCount() - 1); } - if (offset == 0) { + if (mPage == 1) { mGameNewsList.scrollToPosition(1); if (mNewsList.size() == 0) { mNoDataLl.setVisibility(View.VISIBLE); @@ -141,6 +144,7 @@ public class GameNewsAdapter extends BaseRecyclerAdapter { } } + mPage ++; isLoading = false; } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java index e6182dfd7c..f93ff22c54 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/MessageDetailAdapter.java @@ -1,7 +1,6 @@ package com.gh.gamecenter.adapter; import android.app.Activity; -import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; @@ -82,6 +81,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { private boolean isRefreshPosition; private boolean isGetRvHeight = true; // 防止评论时弹出软键盘 影响RecyclerView高度 private int rvHeight; + private int mPage; public MessageDetailAdapter(Activity context, OnCommentCallBackListener listener, RecyclerView messageDetailRv, ConcernEntity concernEntity, String entrance) { @@ -94,6 +94,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { isLoading = false; isNetworkError = false; isRefreshPosition = true; + mPage = 1; mHotCommentList = new ArrayList<>(); mNormalCommentList = new ArrayList<>(); @@ -101,7 +102,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { mConcernEntity = concernEntity; if (mConcernEntity != null && mConcernEntity.getCommentnum() != 0) { - addHotComment(0); + addHotComment(); } else if (mConcernEntity != null) { isOver = true; notifyItemChanged(getItemCount() - 1); @@ -111,8 +112,8 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { } } - public void addHotComment(int offset) { - RetrofitManager.getInstance(mContext).getApi().getHotComment(mConcernEntity.getId(), 10, offset) + public void addHotComment() { + RetrofitManager.getInstance(mContext).getApi().getHotComment(mConcernEntity.getId(), 10, 1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -123,22 +124,22 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { mHotCommentList.addAll(response); notifyDataSetChanged(); } - addNormalComment(mNormalCommentList.size()); // 考虑到断网刷新问题 + addNormalComment(); // 考虑到断网刷新问题 } @Override public void onFailure(HttpException e) { - addNormalComment(mNormalCommentList.size()); + addNormalComment(); } }); } - public void addNormalComment(int offset) { + public void addNormalComment() { if (isLoading) { return; } isLoading = true; - RetrofitManager.getInstance(mContext).getApi().getComment(mConcernEntity.getId(), 10, offset) + RetrofitManager.getInstance(mContext).getApi().getComment(mConcernEntity.getId(), 10, mPage) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -154,6 +155,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { notifyDataSetChanged(); + mPage++; isLoading = false; } @@ -305,7 +307,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { if (mConcernEntity.getLink() != null) { mContext.startActivity(WebActivity.getIntentByNews(mContext, mConcernEntity - ,StringUtils.buildString(mEntrance, "+(消息详情)"))); + , StringUtils.buildString(mEntrance, "+(消息详情)"))); } else { Intent intent = new Intent(mContext, NewsDetailActivity.class); intent.putExtra(EntranceUtils.KEY_NEWSID, mConcernEntity.getId()); @@ -469,7 +471,7 @@ public class MessageDetailAdapter extends BaseRecyclerAdapter { isNetworkError = false; viewHolder.loading.setVisibility(View.VISIBLE); viewHolder.hint.setText(R.string.loading); - addHotComment(0); + addHotComment(); notifyDataSetChanged(); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java index 278dafd19b..435841596f 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java @@ -48,7 +48,6 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { private OnSearchCallBackListener mSearchListener; private List mEntityList; - private List mConcernList; private String mSearchKey; private String mToken; @@ -59,35 +58,42 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { private boolean mIsOver; private boolean mIsNetworkError; + private int mConcernPage; + private int mPage; + public ToolBoxRvAdapter(Context context, OnRequestCallBackListener listener, OnSearchCallBackListener searchListener, boolean isSearch, String key) { super(context); this.mIsSearch = isSearch; this.mSearchKey = key; + mConcernPage = 1; + mPage = 1; mToken = UserManager.getInstance().getToken(); mSearchListener = searchListener; mCallBackListener = listener; mEntityList = new ArrayList<>(); - mConcernList = new ArrayList<>(); - loadData(mIsSearch, 0); + loadData(mIsSearch); } - public void loadData(boolean isSearch, int offset) { + public void loadData(boolean isSearch) { + int normalPage; if (mIsLoading) { return; } mIsLoading = true; - if (offset > 0 && !isSearch && mLoadConcernDataOver) { - offset = offset - mConcernList.size(); + if (!isSearch && mLoadConcernDataOver) { + normalPage = mPage; + } else { + normalPage = mConcernPage; } Observable> api; if (!TextUtils.isEmpty(mToken) && !mLoadConcernDataOver) { - api = RetrofitManager.getInstance(mContext).getApi().getConcernToolKitData(UserManager.getInstance().getUserId(), offset, mSearchKey); + api = RetrofitManager.getInstance(mContext).getApi().getConcernToolKitData(UserManager.getInstance().getUserId(), normalPage, mSearchKey); } else { - api = RetrofitManager.getInstance(mContext).getApi().getToolKitData(offset, mSearchKey); + api = RetrofitManager.getInstance(mContext).getApi().getToolKitData(normalPage, mSearchKey); } api .subscribeOn(Schedulers.io()) @@ -98,10 +104,10 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { super.onResponse(response); if (!mLoadConcernDataOver && response.size() < 20) { mEntityList.addAll(response); - mConcernList = mEntityList; mLoadConcernDataOver = true; mIsLoading = false; - loadData(mIsSearch, 0); + mConcernPage++; + loadData(mIsSearch); } else { if (response.size() >= 0) { removeDuplicateData(mEntityList, response); @@ -116,6 +122,7 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { notifyDataSetChanged(); } + mPage++; mIsLoading = false; if (mEntityList.size() == 0) { @@ -288,7 +295,7 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - loadData(mIsSearch, mEntityList.size()); + loadData(mIsSearch); } }); } else if (mIsOver) { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java index 195c731ee6..4218f0b624 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java @@ -39,16 +39,18 @@ public class VoteAdapter extends BaseRecyclerAdapter { private OnAddVoteListener mAddVoteListener; - private float mPbwidth; //进度条原始最大宽度 - private List mVoteList; private boolean isRemove; private boolean isNetworkError; private boolean isLoaded; + private boolean isLoading; private String mGameId; + private float mPbWidth; //进度条原始最大宽度 + private int mPage; + public VoteAdapter(Context context, OnRequestCallBackListener onRequestCallBackListener, OnAddVoteListener addVoteListener, String gameId) { super(context); @@ -57,17 +59,19 @@ public class VoteAdapter extends BaseRecyclerAdapter { this.mAddVoteListener = addVoteListener; this.mGameId = gameId; - mPbwidth = (float) (mContext.getResources().getDisplayMetrics().widthPixels * 0.65); + mPbWidth = (float) (mContext.getResources().getDisplayMetrics().widthPixels * 0.65); mVoteList = new ArrayList<>(); + mPage = 1; - getVersionVote(0); + getVersionVote(); } - public void getVersionVote(final int offset) { + public void getVersionVote() { + if (isLoading) return; RetrofitManager.getInstance(mContext) .getApi() - .getVersionVote(mGameId, offset, 20) + .getVersionVote(mGameId, mPage, 20) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -75,7 +79,7 @@ public class VoteAdapter extends BaseRecyclerAdapter { public void onResponse(List response) { super.onResponse(response); if (response.size() > 0) { - if (offset == 0) { + if (mPage == 1) { mCallBackListener.loadDone(); } @@ -94,14 +98,17 @@ public class VoteAdapter extends BaseRecyclerAdapter { } } + mPage++; + isLoading = false; isLoaded = true; } @Override public void onFailure(HttpException e) { super.onFailure(e); + isLoading = false; isLoaded = true; - if (offset == 0) { + if (mPage == 1) { mCallBackListener.loadError(); } else { isNetworkError = true; @@ -154,10 +161,10 @@ public class VoteAdapter extends BaseRecyclerAdapter { float curSize = (float) versionVoteEntity.getNum(); float f = curSize / maxSize; - layoutParams.width = (int) (mPbwidth * f); + layoutParams.width = (int) (mPbWidth * f); } else { - layoutParams.width = (int) mPbwidth; + layoutParams.width = (int) mPbWidth; } if (!TextUtils.isEmpty(versionVoteEntity.getReply())) { @@ -173,7 +180,7 @@ public class VoteAdapter extends BaseRecyclerAdapter { viewHolder.voteBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mCallBackListener.loadDone(viewHolder.name.getText().toString()); + mCallBackListener.loadDone(versionVoteEntity.getId()); } }); } else if (holder instanceof FooterViewHolder) { @@ -210,7 +217,7 @@ public class VoteAdapter extends BaseRecyclerAdapter { public void onClick(View v) { isNetworkError = false; notifyItemChanged(getItemCount() - 1); - getVersionVote(mVoteList.size()); + getVersionVote(); } }); } else if (isRemove) { @@ -234,36 +241,34 @@ public class VoteAdapter extends BaseRecyclerAdapter { } } - public void voteCallBack(boolean cast, boolean isNewVote, String id, String name) { + public void voteCallBack(boolean isNewVote, String id, String name) { UserDataEntity userDataEntity = new UserDataEntity(); userDataEntity.setVersionRequested(true); - if (cast) { - if (isNewVote) { - boolean isExists = false; - for (VersionVoteEntity versionVoteEntity : mVoteList) { - if ((id).equals(versionVoteEntity.getId())) { - versionVoteEntity.setNum(versionVoteEntity.getNum() + 1); - isExists = true; - versionVoteEntity.setUserData(userDataEntity); - break; - } + if (isNewVote) { + boolean isExists = false; + for (VersionVoteEntity versionVoteEntity : mVoteList) { + if ((id).equals(versionVoteEntity.getId())) { + versionVoteEntity.setNum(versionVoteEntity.getNum() + 1); + isExists = true; + versionVoteEntity.setUserData(userDataEntity); + break; } - if (!isExists) { - VersionVoteEntity voteEntity = new VersionVoteEntity(); - voteEntity.setUserData(userDataEntity); - voteEntity.setId(id); - voteEntity.setName(name); - voteEntity.setNum(1); - mVoteList.add(voteEntity); - mCallBackListener.loadDone(); - } - } else { - for (VersionVoteEntity versionVoteEntity : mVoteList) { - if ((id).equals(versionVoteEntity.getId())) { - versionVoteEntity.setNum(versionVoteEntity.getNum() + 1); - versionVoteEntity.setUserData(userDataEntity); - break; - } + } + if (!isExists) { + VersionVoteEntity voteEntity = new VersionVoteEntity(); + voteEntity.setUserData(userDataEntity); + voteEntity.setId(id); + voteEntity.setName(name); + voteEntity.setNum(1); + mVoteList.add(voteEntity); + mCallBackListener.loadDone(); + } + } else { + for (VersionVoteEntity versionVoteEntity : mVoteList) { + if ((id).equals(versionVoteEntity.getId())) { + versionVoteEntity.setNum(versionVoteEntity.getNum() + 1); + versionVoteEntity.setUserData(userDataEntity); + break; } } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage1ViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage1ViewHolder.java index 820058c1b9..bd8d2a39bf 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage1ViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage1ViewHolder.java @@ -7,8 +7,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; - -import java.util.List; +import com.gh.gamecenter.entity.NewsEntity; import butterknife.BindView; @@ -16,7 +15,7 @@ import butterknife.BindView; * Created by LGT on 2016/6/6. * viewholder */ -public class NewsImage1ViewHolder extends BaseRecyclerViewHolder { +public class NewsImage1ViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.news_image1_thumb) public SimpleDraweeView thumb; @@ -31,8 +30,8 @@ public class NewsImage1ViewHolder extends BaseRecyclerViewHolder { super(itemView); } - public NewsImage1ViewHolder(View itemView, List data, OnListClickListener listClickListener) { - super(itemView, data, listClickListener); + public NewsImage1ViewHolder(View itemView, OnListClickListener listClickListener) { + super(itemView, listClickListener); itemView.setOnClickListener(this); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage2ViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage2ViewHolder.java index 979eb2dcdc..094c529acf 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage2ViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage2ViewHolder.java @@ -7,8 +7,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; - -import java.util.List; +import com.gh.gamecenter.entity.NewsEntity; import butterknife.BindView; @@ -16,7 +15,7 @@ import butterknife.BindView; * Created by LGT on 2016/7/5. * viewholder */ -public class NewsImage2ViewHolder extends BaseRecyclerViewHolder { +public class NewsImage2ViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.news_image2_title) public TextView title; @@ -31,12 +30,9 @@ public class NewsImage2ViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.news_image2_type) public TextView type; - public NewsImage2ViewHolder(View itemView) { - super(itemView); - } - public NewsImage2ViewHolder(View itemView, List data, OnListClickListener listClickListener) { - super(itemView, data, listClickListener); + public NewsImage2ViewHolder(View itemView, OnListClickListener listClickListener) { + super(itemView, listClickListener); itemView.setOnClickListener(this); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage3ViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage3ViewHolder.java index ddcd81bec4..b39058d765 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage3ViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/NewsImage3ViewHolder.java @@ -7,8 +7,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; - -import java.util.List; +import com.gh.gamecenter.entity.NewsEntity; import butterknife.BindView; @@ -16,7 +15,7 @@ import butterknife.BindView; * Created by LGT on 2016/7/5. * viewholder */ -public class NewsImage3ViewHolder extends BaseRecyclerViewHolder { +public class NewsImage3ViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.news_image3_title) public TextView title; @@ -27,12 +26,8 @@ public class NewsImage3ViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.news_image3_type) public TextView type; - public NewsImage3ViewHolder(View itemView) { - super(itemView); - } - - public NewsImage3ViewHolder(View itemView, List data, OnListClickListener listClickListener) { - super(itemView, data, listClickListener); + public NewsImage3ViewHolder(View itemView,OnListClickListener listClickListener) { + super(itemView, listClickListener); itemView.setOnClickListener(this); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ToolBoxViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ToolBoxViewHolder.java index 666dbcf755..0f00c302cf 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ToolBoxViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/ToolBoxViewHolder.java @@ -7,6 +7,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.ToolBoxEntity; import butterknife.BindView; @@ -14,7 +15,7 @@ import butterknife.BindView; * Created by khy on 24/05/17. */ -public class ToolBoxViewHolder extends BaseRecyclerViewHolder { +public class ToolBoxViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.toolbox_item_game_thumb) public SimpleDraweeView mGameThumb; @BindView(R.id.toolbox_item_title) @@ -26,8 +27,8 @@ public class ToolBoxViewHolder extends BaseRecyclerViewHolder { super(itemView); } - public ToolBoxViewHolder(View itemView, Object data, OnListClickListener listClickListener) { - super(itemView, data, listClickListener); + public ToolBoxViewHolder(View itemView, OnListClickListener listClickListener) { + super(itemView, listClickListener); itemView.setOnClickListener(this); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java index d59b7f663c..e180a26423 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java @@ -24,7 +24,7 @@ public class AskQuestionsHotViewModel extends ListViewModel> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getApplication()).getApi().getAskHot(UserManager.getInstance().getCommunityId(getApplication()), offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getApplication()).getApi().getAskHot(UserManager.getInstance().getCommunityId(getApplication()), page); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyFragment.java index 99b2da9be7..fc6a673a0f 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyFragment.java @@ -81,8 +81,8 @@ public class AskQuestionsNewBodyFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getAskQuestions(mCommunityId, mType, offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getAskQuestions(mCommunityId, mType, page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditIndexFragment.java b/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditIndexFragment.java index 493d4b5c1f..f7ce6f42d0 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditIndexFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditIndexFragment.java @@ -51,7 +51,7 @@ public class QuestionsEditIndexFragment extends ListFragment> provideDataObservable(int offset) { + public Observable> provideDataObservable(int page) { if (TextUtils.isEmpty(mSearchKey)) { Fragment parentFragment = getParentFragment(); if (parentFragment instanceof QuestionsEditFragment) { @@ -61,7 +61,7 @@ public class QuestionsEditIndexFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getAskGameSelect(offset); - } - - @Override public void onListClick(View view, int position, Object data) { super.onListClick(view, position, data); diff --git a/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java index ab4739a1fc..b0d27c7dd0 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java @@ -23,7 +23,7 @@ public class SelectGameViewModel extends ListViewModel> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getApplication()).getApi().getAskGameSelect(offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getApplication()).getApi().getAskGameSelect(page); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsFragment.java index 5f97922648..e227d7183e 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsFragment.java @@ -43,8 +43,8 @@ public class ConcernQuestionsFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getConcernQuestions(UserManager.getInstance().getUserId(), offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getConcernQuestions(UserManager.getInstance().getUserId(), page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java index bf143f1a71..996052c594 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java @@ -44,8 +44,8 @@ public class MyAnswerFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMyAnswers(UserManager.getInstance().getUserId(), offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMyAnswers(UserManager.getInstance().getUserId(), page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java index 0507ec8613..98de0d509e 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java @@ -64,8 +64,8 @@ public class MyDraftFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMyAnswerDrafts(UserManager.getInstance().getUserId(), offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMyAnswerDrafts(UserManager.getInstance().getUserId(), page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsFragment.java index eee272e270..744bfadc0d 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsFragment.java @@ -42,8 +42,8 @@ public class MyQuestionsFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMyQuestions(UserManager.getInstance().getUserId(), offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMyQuestions(UserManager.getInstance().getUserId(), page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java index 3786ae6bf8..92d83ab772 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java @@ -72,8 +72,8 @@ public class AnswerFoldFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, true, offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, true, page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java index 4b87aa8c7f..448d06100a 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java @@ -169,8 +169,8 @@ public class QuestionsDetailFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, false, offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, false, page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailViewModel.java index 6d3baee37e..3e5c521883 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailViewModel.java @@ -22,7 +22,7 @@ public class QuestionsDetailViewModel extends ListViewModel> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getApplication()).getApi().getQuestionsAnswer("", false, offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getApplication()).getApi().getQuestionsAnswer("", false, page); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java index e7bc2b15ab..a4e8673ad1 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java @@ -78,12 +78,12 @@ public class QuestionsInviteFragment extends ListFragment> provideDataObservable(int offset) { + public Observable> provideDataObservable(int page) { if (TextUtils.isEmpty(mSearchKey)) { - return RetrofitManager.getInstance(getContext()).getApi().getInviteExperts(mQuestionsDetailEntity.getId(), offset); + return RetrofitManager.getInstance(getContext()).getApi().getInviteExperts(mQuestionsDetailEntity.getId(), page); } else { return RetrofitManager.getInstance(getContext()).getApi().getSearchInviteExperts(mQuestionsDetailEntity.getId() - , UrlFilterUtils.getFilterQuery("keyword", mSearchKey), offset); + , UrlFilterUtils.getFilterQuery("keyword", mSearchKey), page); } diff --git a/app/src/main/java/com/gh/gamecenter/ask/search/AskSearchFragment.java b/app/src/main/java/com/gh/gamecenter/ask/search/AskSearchFragment.java index 586d50d479..6dca3357fe 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/search/AskSearchFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/search/AskSearchFragment.java @@ -85,10 +85,10 @@ public class AskSearchFragment extends ListFragment> provideDataObservable(int offset) { + public Observable> provideDataObservable(int page) { if (TextUtils.isEmpty(mSearchKey)) return null; return RetrofitManager.getInstance(getContext()).getApi().getAskSearch(UserManager.getInstance().getCommunityId(getContext()) - , UrlFilterUtils.getFilterQuery("keyword", mSearchKey), offset); + , UrlFilterUtils.getFilterQuery("keyword", mSearchKey), page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentViewModel.java index 1202b1ea6b..0ee44c7e00 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/ask/viewmodel/AnswerCommentViewModel.java @@ -38,11 +38,11 @@ public class AnswerCommentViewModel extends ListViewModel> provideDataObservable(int offset) { + public Observable> provideDataObservable(int page) { if (TextUtils.isEmpty(mCommentId)) { - return RetrofitManager.getInstance(getApplication()).getApi().getAnswerCommentList(mAnswerId, 0, offset); + return RetrofitManager.getInstance(getApplication()).getApi().getAnswerCommentList(mAnswerId, 0, page); } else { - return RetrofitManager.getInstance(getApplication()).getApi().getAnswerCommentConversationList(mAnswerId, mCommentId, 0, offset); + return RetrofitManager.getInstance(getApplication()).getApi().getAnswerCommentConversationList(mAnswerId, mCommentId, 0, page); } // return RetrofitManager.getInstance(getApplication()).getApi().getComment("59c0b965e9a64abe2a423544", 0, offset); } diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java index f122ea1c94..8fdf8e68e1 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java @@ -152,7 +152,7 @@ public abstract class ListFragment> provideDataObservable(int offset) { + public Observable> provideDataObservable(int page) { return null; } diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListRepository.java b/app/src/main/java/com/gh/gamecenter/baselist/ListRepository.java index 0f86f37ab8..e98d4cb6d4 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListRepository.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListRepository.java @@ -80,7 +80,7 @@ public class ListRepository { } private void loadStatusControl(int size) { - if (mCurLoadParams.getLoadOffset() == 0) { // 初始化列表 + if (mCurLoadParams.getLoadOffset() == LoadParams.DEFAULT_OFFSET) { // 初始化列表 if (size == 0) { mLoadStatusLiveData.postValue(LoadStatus.INIT_EMPTY); } else if (size == REQUEST_FAILURE_SIZE) { @@ -104,12 +104,12 @@ public class ListRepository { mRetryParams = mCurLoadParams; } else { mRetryParams = null; - mCurLoadParams.setLoadOffset(mCurLoadParams.getLoadOffset() + size); + mCurLoadParams.setLoadOffset(mCurLoadParams.getLoadOffset() + 1); // 页数 + 1 } } private void initLoadParams() { - mCurLoadParams = new LoadParams(0); + mCurLoadParams = new LoadParams(LoadParams.DEFAULT_OFFSET); mLoadStatusLiveData.setValue(LoadStatus.INIT); } diff --git a/app/src/main/java/com/gh/gamecenter/baselist/LoadParams.java b/app/src/main/java/com/gh/gamecenter/baselist/LoadParams.java index 4dd7364b21..b54f1b0812 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/LoadParams.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/LoadParams.java @@ -8,6 +8,8 @@ public class LoadParams { public final static int DEFAULT_PAGE_SIZE = 20; + public final static int DEFAULT_OFFSET = 1; + private int loadSize; private int loadOffset; diff --git a/app/src/main/java/com/gh/gamecenter/baselist/OnDataObservable.java b/app/src/main/java/com/gh/gamecenter/baselist/OnDataObservable.java index 18589bb707..f5b198252b 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/OnDataObservable.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/OnDataObservable.java @@ -9,5 +9,5 @@ import rx.Observable; */ public interface OnDataObservable { - Observable> provideDataObservable(int offset); + Observable> provideDataObservable(int page); } diff --git a/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java b/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java index da5052473a..52a81da110 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java @@ -36,8 +36,8 @@ public class AnswerFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getCollestionAnswer(UserManager.getInstance().getUserId(), offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getCollectionAnswer(UserManager.getInstance().getUserId(), page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/collection/ArticleAdapter.java b/app/src/main/java/com/gh/gamecenter/collection/ArticleAdapter.java index 31ea575c4f..16a6cccf1b 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/ArticleAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/collection/ArticleAdapter.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.collection; import android.content.Context; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; @@ -9,8 +10,6 @@ import android.view.WindowManager; import android.widget.LinearLayout; import com.gh.base.OnListClickListener; -import com.gh.base.OnRequestCallBackListener; -import com.gh.common.constant.Config; import com.gh.common.constant.ItemViewType; import com.gh.common.util.DisplayUtils; import com.gh.common.util.ImageUtils; @@ -20,30 +19,18 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsImage1ViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsImage2ViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsImage3ViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.entity.ViewsEntity; -import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.manager.VisitManager; import com.gh.gamecenter.retrofit.JSONObjectResponse; -import com.gh.gamecenter.retrofit.ObservableUtil; -import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.adapter.BaseRecyclerAdapter; -import com.lightgame.utils.Utils; import org.json.JSONException; import org.json.JSONObject; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; -import retrofit2.HttpException; -import rx.Observable; -import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; -import rx.functions.Func1; import rx.schedulers.Schedulers; @@ -51,138 +38,31 @@ import rx.schedulers.Schedulers; * Created by khy on 18/07/17. */ -public class ArticleAdapter extends BaseRecyclerAdapter { +public class ArticleAdapter extends ListAdapter { - private OnRequestCallBackListener mListener; private OnListClickListener mListListener; - private List mNewsList; - - private boolean isLoading; - private boolean isOver; - private boolean isNetworkError; - - - public ArticleAdapter(Context context, OnRequestCallBackListener listener, OnListClickListener listListener) { + public ArticleAdapter(Context context, OnListClickListener listListener) { super(context); mListListener = listListener; - mListener = listener; - mNewsList = new ArrayList<>(); } - public void addList(final int offset) { - if (isLoading) { - return; - } - isLoading = true; - RetrofitManager.getInstance(mContext) - .getApi() - .getCollectionArticle(UserManager.getInstance().getUserId(), offset) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - super.onResponse(response); - Config.filterPluginArticle(response); - isLoading = false; - - if (response.size() != 0) { - mNewsList.addAll(response); - notifyItemRangeInserted(mNewsList.size() - response.size(), response.size()); - } - - if (offset == 0 && mListener != null) { - if (mNewsList.size() == 0) { - mListener.loadEmpty(); - } else { - mListener.loadDone(); - } - } - - if (response.size() < 20) { - isOver = true; - notifyItemChanged(getItemCount() - 1); - } - - // 获取新闻阅读量 - getNewsViews(response, offset); - } - - @Override - public void onFailure(HttpException e) { - super.onFailure(e); - isLoading = false; - // 网络错误 - if (offset == 0) { - if (mListener != null) { - mListener.loadError(); - } - } else { - Utils.toast(mContext, R.string.loading_failed_hint); - isNetworkError = true; - notifyItemChanged(getItemCount() - 1); - } - } - }); + @Override + protected boolean areItemsTheSame(NewsEntity oldItem, NewsEntity newItem) { + return !TextUtils.isEmpty(oldItem.getId()) && oldItem.getId().equals(newItem.getId()); } - // 获取新闻阅读量 - private void getNewsViews(final List list, final int start) { - if (list == null || list.isEmpty()) { - return; - } - ObservableUtil.computation(new Observable.OnSubscribe() { - @Override - public void call(Subscriber subscriber) { - StringBuilder builder = new StringBuilder(); - for (int i = 0, size = list.size(); i < size; i++) { - builder.append(list.get(i).getId()); - builder.append("-"); - } - builder.deleteCharAt(builder.length() - 1); - String ids = builder.toString(); - VisitManager.getInstance().addUrl(ids); - subscriber.onNext(ids); - subscriber.onCompleted(); - } - }, new Action1() { - @Override - public void call(String ids) { - RetrofitManager.getInstance(mContext).getData() - .getNewsViews(ids) - .map(new Func1, String>() { - @Override - public String call(List list) { - for (ViewsEntity viewsEntity : list) { - for (NewsEntity newsEntity : mNewsList) { - if (viewsEntity.getId().equals(newsEntity.getId())) { - newsEntity.setViews(viewsEntity.getViews()); - break; - } - } - } - return null; - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(String response) { - notifyItemRangeChanged(start, list.size()); - } - }); - } - }); + @Override + protected boolean areContentsTheSame(NewsEntity oldItem, NewsEntity newItem) { + return oldItem.getViews() == newItem.getViews(); } @Override public int getItemViewType(int position) { - if (position == mNewsList.size()) { + if (position == mEntityList.size()) { return ItemViewType.LOADING; } - NewsEntity newsEntity = mNewsList.get(position); + NewsEntity newsEntity = mEntityList.get(position); if (newsEntity.getThumbnail() == null) { return ItemViewType.NEWS_IMAGE1; @@ -202,13 +82,13 @@ public class ArticleAdapter extends BaseRecyclerAdapter { switch (viewType) { case ItemViewType.NEWS_IMAGE1: view = mLayoutInflater.inflate(R.layout.news_image1_item, parent, false); - return new NewsImage1ViewHolder(view, mNewsList, mListListener); + return new NewsImage1ViewHolder(view, mListListener); case ItemViewType.NEWS_IMAGE2: view = mLayoutInflater.inflate(R.layout.news_image2_item, parent, false); - return new NewsImage2ViewHolder(view, mNewsList, mListListener); + return new NewsImage2ViewHolder(view, mListListener); case ItemViewType.NEWS_IMAGE3: view = mLayoutInflater.inflate(R.layout.news_image3_item, parent, false); - return new NewsImage3ViewHolder(view, mNewsList, mListListener); + return new NewsImage3ViewHolder(view, mListListener); case ItemViewType.LOADING: return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); default: @@ -229,7 +109,9 @@ public class ArticleAdapter extends BaseRecyclerAdapter { initNewsImage3ViewHolder((NewsImage3ViewHolder) holder, position); break; case ItemViewType.LOADING: - initFooterViewHolder((FooterViewHolder) holder); + FooterViewHolder footerViewHolder = (FooterViewHolder) holder; + footerViewHolder.initItemPadding(); + footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); break; } } @@ -237,14 +119,13 @@ public class ArticleAdapter extends BaseRecyclerAdapter { @Override public int getItemCount() { - if (mNewsList.size() == 0) return 0; - return mNewsList.size() + 1; + return mEntityList == null ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } private void initNewsImage1ViewHolder(final NewsImage1ViewHolder viewHolder, int position) { - final NewsEntity newsEntity = mNewsList.get(position); - + final NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); if (newsEntity.getThumbnail() != null && newsEntity.getThumbnail().getUrl() != null) { ImageUtils.Companion.display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0)); } else { @@ -263,8 +144,8 @@ public class ArticleAdapter extends BaseRecyclerAdapter { private void initNewsImage2ViewHolder(final NewsImage2ViewHolder viewHolder, int position) { - final NewsEntity newsEntity = mNewsList.get(position); - + final NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); @@ -298,8 +179,8 @@ public class ArticleAdapter extends BaseRecyclerAdapter { private void initNewsImage3ViewHolder(final NewsImage3ViewHolder viewHolder, int position) { - final NewsEntity newsEntity = mNewsList.get(position); - + final NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); viewHolder.title.setText(newsEntity.getTitle()); ImageUtils.Companion.getInstance().display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0), mContext.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(mContext, 40)); @@ -313,32 +194,6 @@ public class ArticleAdapter extends BaseRecyclerAdapter { NewsUtils.setNewsType(viewHolder.type, newsEntity.getType(), newsEntity.getPriority(), position); } - - private void initFooterViewHolder(FooterViewHolder viewHolder) { - viewHolder.initItemPadding(); - if (isNetworkError) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_failed_retry); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 1); - addList(mNewsList.size()); - } - }); - } else if (isOver) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_complete); - viewHolder.itemView.setClickable(false); - } else { - viewHolder.loading.setVisibility(View.VISIBLE); - viewHolder.hint.setText(R.string.loading); - viewHolder.itemView.setClickable(false); - } - } - // 统计新闻阅读量 public void statNewsViews(final NewsEntity newsEntity, final int position) { RetrofitManager.getInstance(mContext).getData().postNewsViews(newsEntity.getId()) @@ -365,20 +220,4 @@ public class ArticleAdapter extends BaseRecyclerAdapter { }); } - - List getDataList() { - return mNewsList; - } - - public boolean isOver() { - return isOver; - } - - public boolean isLoading() { - return isLoading; - } - - public boolean isNetworkError() { - return isNetworkError; - } } diff --git a/app/src/main/java/com/gh/gamecenter/collection/ArticleFragment.java b/app/src/main/java/com/gh/gamecenter/collection/ArticleFragment.java index dcc76bcefc..33804b3731 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/ArticleFragment.java +++ b/app/src/main/java/com/gh/gamecenter/collection/ArticleFragment.java @@ -1,21 +1,14 @@ package com.gh.gamecenter.collection; -import android.os.Bundle; -import android.support.annotation.Nullable; -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.LinearLayout; -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.fragment.BaseFragment; import com.gh.common.util.CollectionUtils; import com.gh.common.util.DataCollectionUtils; import com.gh.gamecenter.DataUtils; -import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.NewsDetailActivity; -import com.gh.gamecenter.R; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadType; import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.eventbus.EBCollectionChanged; @@ -23,144 +16,33 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.HashMap; -import java.util.List; import java.util.Map; -import butterknife.BindView; -import butterknife.OnClick; - /** * Created by khy on 18/07/17. */ -public class ArticleFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { - - @BindView(R.id.article_rv) - RecyclerView mRecyclerView; - @BindView(R.id.article_refresh) - SwipeRefreshLayout mRefreshLayout; - @BindView(R.id.reuse_no_connection) - LinearLayout mNoConn; - @BindView(R.id.reuse_none_data) - LinearLayout mNoData; - @BindView(R.id.article_loading) - ProgressBarCircularIndeterminate mLoading; +public class ArticleFragment extends ListFragment { private ArticleAdapter mAdapter; - Runnable runnable = new Runnable() { - @Override - public void run() { - mAdapter = new ArticleAdapter(getContext(), ArticleFragment.this, ArticleFragment.this); - mRecyclerView.setAdapter(mAdapter); - mAdapter.addList(0); - } - }; - private LinearLayoutManager mLayoutManager; - @Override - protected int getLayoutId() { - return R.layout.fragment_article; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mRefreshLayout.setColorSchemeResources(R.color.theme); - mRefreshLayout.setOnRefreshListener(this); - - mLayoutManager = new LinearLayoutManager(getContext()); - mRecyclerView.setLayoutManager(mLayoutManager); - - mAdapter = new ArticleAdapter(getContext(), this, this); - mRecyclerView.setAdapter(mAdapter); - mRecyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); - mAdapter.addList(0); - - mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - if (newState == RecyclerView.SCROLL_STATE_IDLE - && mLayoutManager.findLastVisibleItemPosition() + 1 == mAdapter.getItemCount()) { - if (!mAdapter.isOver() && !mAdapter.isLoading() && !mAdapter.isNetworkError()) { - mAdapter.addList(mAdapter.getItemCount() - 1); - } - } - } - }); - } - - @OnClick(R.id.reuse_no_connection) - public void reconnection() { // 重新连接 - mRecyclerView.setVisibility(View.VISIBLE); - mNoConn.setVisibility(View.GONE); - mLoading.setVisibility(View.VISIBLE); - postDelayedRunnable(runnable, 1000); - } - - - @Override - public void loadDone() { // 数据加载成功回调 - mRefreshLayout.setRefreshing(false); - mRecyclerView.setVisibility(View.VISIBLE); - mNoConn.setVisibility(View.GONE); - mNoData.setVisibility(View.GONE); - mLoading.setVisibility(View.GONE); - } - - @Override - public void loadError() { // 数据加载失败回调 - mRefreshLayout.setRefreshing(false); - mRecyclerView.setVisibility(View.GONE); - mNoConn.setVisibility(View.VISIBLE); - mLoading.setVisibility(View.GONE); - mNoData.setVisibility(View.GONE); - } - - @Override - public void loadEmpty() { - super.loadEmpty(); - mRefreshLayout.setRefreshing(false); - mRecyclerView.setVisibility(View.GONE); - mNoConn.setVisibility(View.GONE); - mLoading.setVisibility(View.GONE); - mNoData.setVisibility(View.VISIBLE); + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new ArticleAdapter(getContext(), this) : mAdapter; } // 收藏事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBCollectionChanged changed) { - if (changed.getCollectionType().equals(CollectionUtils.CollectionType.article)) { - if (changed.isColleciton()) { - postRunnable(runnable); - } else { - List dataList = mAdapter.getDataList(); - for (int i = 0; i < dataList.size(); i++) { - String id = dataList.get(i).getId(); - if (id != null && id.equals(changed.getId())) { - dataList.remove(i); - mAdapter.notifyDataSetChanged(); - - if (dataList.size() == 0) { - loadEmpty(); - } - break; - } - } - } + if (changed.getCollectionType().equals(CollectionUtils.CollectionType.article)) { // 取消关注/新增关注 + mListViewModel.load(LoadType.REFRESH); } } - @Override - public void onRefresh() { - postDelayedRunnable(runnable, 1000); - } - @Override public void onListClick(View view, int position, Object data) { - NewsEntity newsEntity = ((List) data).get(position); + NewsEntity newsEntity = (NewsEntity) data; Map kv = new HashMap<>(); kv.put("名字", newsEntity.getTitle()); diff --git a/app/src/main/java/com/gh/gamecenter/collection/ArticleViewModel.java b/app/src/main/java/com/gh/gamecenter/collection/ArticleViewModel.java new file mode 100644 index 0000000000..f5b3a09738 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/collection/ArticleViewModel.java @@ -0,0 +1,66 @@ +package com.gh.gamecenter.collection; + +import android.app.Application; +import android.arch.lifecycle.LiveData; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.entity.ViewsEntity; +import com.gh.gamecenter.info.NewsViewsRepository; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 30/03/18. + */ + +public class ArticleViewModel extends ListViewModel { + + + NewsViewsRepository mNewsViewsRepository = new NewsViewsRepository<>(); + + public ArticleViewModel(@NonNull Application application) { + super(application); + mResultLiveData.addSource(mListLiveData, list -> { + if (list == null) return; + mResultLiveData.postValue(NewsEntity.Companion.deepCopy(list)); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < list.size(); i++) { + NewsEntity newsEntity = list.get(i); + if (newsEntity.getViews() == 0) { + builder.append(newsEntity.getId()); + builder.append("-"); + } + } + builder.deleteCharAt(builder.length() - 1); + String ids = builder.toString(); + + mNewsViewsRepository.getNewsViews(RetrofitManager.getInstance(getApplication()).getData().getNewsViews(ids)); + }); + + LiveData> listLiveData = mNewsViewsRepository.asLiveData(); + mResultLiveData.addSource(listLiveData, viewsEntities -> { + List value = mListLiveData.getValue(); + if (value != null && viewsEntities != null) + for (ViewsEntity viewsEntity : viewsEntities) { + for (NewsEntity newsEntity : value) { + if (viewsEntity.getId().equals(newsEntity.getId())) { + newsEntity.setViews(viewsEntity.getViews()); + break; + } + } + } + mResultLiveData.postValue(NewsEntity.Companion.deepCopy(value)); + }); + } + + @Override + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getApplication()).getApi().getCollectionArticle(UserManager.getInstance().getUserId(), page); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/collection/ToolsAdapter.java b/app/src/main/java/com/gh/gamecenter/collection/ToolsAdapter.java index cd630b813a..f336d04186 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/ToolsAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/collection/ToolsAdapter.java @@ -6,122 +6,52 @@ import android.view.View; import android.view.ViewGroup; import com.gh.base.OnListClickListener; -import com.gh.base.OnRequestCallBackListener; +import com.gh.common.constant.ItemViewType; import com.gh.common.util.ImageUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.ToolBoxViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.entity.ToolBoxEntity; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.adapter.BaseRecyclerAdapter; -import com.lightgame.utils.Utils; import java.util.ArrayList; import java.util.List; -import retrofit2.HttpException; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; - /** * Created by khy on 18/07/17. */ -public class ToolsAdapter extends BaseRecyclerAdapter { +public class ToolsAdapter extends ListAdapter { - private OnRequestCallBackListener mListener; private OnListClickListener mListListener; - private List mEntityList; - - private boolean isLoading; - private boolean isOver; - private boolean isNetworkError; - - public ToolsAdapter(Context context, OnRequestCallBackListener listener, OnListClickListener listListener) { + public ToolsAdapter(Context context, OnListClickListener listListener) { super(context); - mListener = listener; mListListener = listListener; mEntityList = new ArrayList<>(); } - public void addList(final int offset) { - if (isLoading) { - return; - } - - if (offset == 0 && mEntityList.size() > 0) { - mEntityList.clear(); - notifyDataSetChanged(); - } - isLoading = true; - RetrofitManager.getInstance(mContext) - .getApi() - .getCollectionTools(UserManager.getInstance().getUserId(), offset) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - super.onResponse(response); - isLoading = false; - - if (response.size() != 0) { - mEntityList.addAll(response); - notifyItemRangeInserted(mEntityList.size() - response.size(), response.size()); - } - - if (offset == 0 && mListener != null) { - if (mEntityList.size() == 0) { - mListener.loadEmpty(); - } else { - mListener.loadDone(); - } - } - - if (response.size() < 20) { - isOver = true; - notifyItemChanged(getItemCount() - 1); - } - - } - - @Override - public void onFailure(HttpException e) { - super.onFailure(e); - isLoading = false; - // 网络错误 - if (offset == 0) { - if (mListener != null) { - mListener.loadError(); - } - } else { - Utils.toast(mContext, R.string.loading_failed_hint); - isNetworkError = true; - notifyItemChanged(getItemCount() - 1); - } - } - }); + @Override + protected void setListData(List updateData) { + super.setListData(updateData); } @Override public int getItemViewType(int position) { if (position == getItemCount() - 1) { - return 0; + return ItemViewType.ITEM_FOOTER; } else { - return 1; + return ItemViewType.ITEM_BODY; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == 0) { + if (viewType == ItemViewType.ITEM_FOOTER) { return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); } else { View view = mLayoutInflater.inflate(R.layout.toolbox_item, parent, false); - return new ToolBoxViewHolder(view, mEntityList, mListListener); + return new ToolBoxViewHolder(view, mListListener); } } @@ -132,61 +62,21 @@ public class ToolsAdapter extends BaseRecyclerAdapter { ToolBoxEntity toolBoxEntity = mEntityList.get(position); initToolsViewHolder(viewHolder, toolBoxEntity); } else if (holder instanceof FooterViewHolder) { - FooterViewHolder viewHolder = (FooterViewHolder) holder; - initFooterViewHolder(viewHolder); + FooterViewHolder footerViewHolder = (FooterViewHolder) holder; + footerViewHolder.initItemPadding(); + footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); } } @Override public int getItemCount() { - if (mEntityList.size() == 0) return 0; - return mEntityList.size() + 1; - } - - private void initFooterViewHolder(FooterViewHolder viewHolder) { - viewHolder.initItemPadding(); - if (isNetworkError) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_failed_retry); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 1); - addList(mEntityList.size()); - } - }); - } else if (isOver) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_complete); - viewHolder.itemView.setClickable(false); - } else { - viewHolder.loading.setVisibility(View.VISIBLE); - viewHolder.hint.setText(R.string.loading); - viewHolder.itemView.setClickable(false); - } + return mEntityList == null ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } private void initToolsViewHolder(ToolBoxViewHolder viewHolder, final ToolBoxEntity toolBoxEntity) { + viewHolder.setClickData(toolBoxEntity); viewHolder.mDes.setText(toolBoxEntity.getDes()); viewHolder.mTitle.setText(toolBoxEntity.getName()); ImageUtils.Companion.display(viewHolder.mGameThumb, toolBoxEntity.getIcon()); } - - List getDataList() { - return mEntityList; - } - - public boolean isOver() { - return isOver; - } - - public boolean isLoading() { - return isLoading; - } - - public boolean isNetworkError() { - return isNetworkError; - } } diff --git a/app/src/main/java/com/gh/gamecenter/collection/ToolsFragment.java b/app/src/main/java/com/gh/gamecenter/collection/ToolsFragment.java index daddd51f29..a2c7bf953e 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/ToolsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/collection/ToolsFragment.java @@ -1,30 +1,26 @@ package com.gh.gamecenter.collection; import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -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.LinearLayout; -import com.gh.base.fragment.BaseFragment; import com.gh.common.util.CollectionUtils; -import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.NewsDetailActivity; -import com.gh.gamecenter.R; import com.gh.gamecenter.WebActivity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.entity.ToolBoxEntity; import com.gh.gamecenter.eventbus.EBCollectionChanged; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.List; -import butterknife.BindView; -import butterknife.OnClick; +import rx.Observable; import static com.gh.common.constant.Config.URL_ARTICLE; @@ -32,136 +28,36 @@ import static com.gh.common.constant.Config.URL_ARTICLE; * Created by khy on 18/07/17. */ -public class ToolsFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { - - @BindView(R.id.tools_rv) - RecyclerView mRecyclerView; - @BindView(R.id.tools_refresh) - SwipeRefreshLayout mRefreshLayout; - @BindView(R.id.reuse_no_connection) - LinearLayout mNoConn; - @BindView(R.id.reuse_none_data) - LinearLayout mNoData; - @BindView(R.id.tools_loading) - View mLoading; +public class ToolsFragment extends ListFragment { private ToolsAdapter mAdapter; - Runnable runnable = new Runnable() { - @Override - public void run() { - mAdapter.addList(0); - } - }; - private LinearLayoutManager mLayoutManager; - - @Override - protected int getLayoutId() { - return R.layout.fragment_tools; + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new ToolsAdapter(getContext(), this) : mAdapter; } @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mRefreshLayout.setColorSchemeResources(R.color.theme); - mRefreshLayout.setOnRefreshListener(this); - - mLayoutManager = new LinearLayoutManager(getContext()); - mRecyclerView.setLayoutManager(mLayoutManager); - mAdapter = new ToolsAdapter(getContext(), this, this); - mRecyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); - mRecyclerView.setAdapter(mAdapter); - mAdapter.addList(0); - - mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - if (newState == RecyclerView.SCROLL_STATE_IDLE - && mLayoutManager.findLastVisibleItemPosition() + 1 == mAdapter.getItemCount()) { - if (!mAdapter.isOver() && !mAdapter.isLoading() && !mAdapter.isNetworkError()) { - mAdapter.addList(mAdapter.getItemCount() - 1); - } - } - } - }); - } - - @OnClick(R.id.reuse_no_connection) - public void reconnection() { // 重新连接 - mRecyclerView.setVisibility(View.VISIBLE); - mNoConn.setVisibility(View.GONE); - mLoading.setVisibility(View.VISIBLE); - postDelayedRunnable(runnable, 1000); - } - - - @Override - public void loadDone() { // 数据加载成功回调 - mRefreshLayout.setRefreshing(false); - mRecyclerView.setVisibility(View.VISIBLE); - mNoConn.setVisibility(View.GONE); - mNoData.setVisibility(View.GONE); - mLoading.setVisibility(View.GONE); - } - - @Override - public void loadError() { // 数据加载失败回调 - mRefreshLayout.setRefreshing(false); - mRecyclerView.setVisibility(View.GONE); - mNoConn.setVisibility(View.VISIBLE); - mNoData.setVisibility(View.GONE); - mLoading.setVisibility(View.GONE); - } - - @Override - public void loadEmpty() { - super.loadEmpty(); - mRefreshLayout.setRefreshing(false); - mRecyclerView.setVisibility(View.GONE); - mNoConn.setVisibility(View.GONE); - mNoData.setVisibility(View.VISIBLE); - mLoading.setVisibility(View.GONE); - } - - @Override - public void onRefresh() { - postDelayedRunnable(runnable, 1000); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getCollectionTools(UserManager.getInstance().getUserId(), page); } // 收藏事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBCollectionChanged changed) { if (changed.getCollectionType().equals(CollectionUtils.CollectionType.toolkit)) { - if (changed.isColleciton()) { - postRunnable(runnable); - } else { - List dataList = mAdapter.getDataList(); - for (int i = 0; i < dataList.size(); i++) { - String id = dataList.get(i).getId(); - if (id != null && id.equals(changed.getId())) { - dataList.remove(i); - mAdapter.notifyDataSetChanged(); - - if (dataList.size() == 0) { - loadEmpty(); - } - break; - } - } - } + mListViewModel.load(LoadType.REFRESH); } } @Override public void onListClick(View view, int position, Object data) { - ToolBoxEntity toolBoxEntity = ((List) data).get(position); + ToolBoxEntity toolBoxEntity = (ToolBoxEntity) data; String url = toolBoxEntity.getUrl(); if (url != null && url.contains(URL_ARTICLE)) { String newsId = url.substring(url.lastIndexOf("/") + 1, url.length() - 5); Intent intent = NewsDetailActivity.getIntentById(getContext(), newsId, true, "(收藏:工具箱)"); - getContext().startActivity(intent); + startActivity(intent); } else { startActivity(WebActivity.getWebByCollectionTools(getContext(), toolBoxEntity, true)); } diff --git a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.kt index 2148bb1758..867293a5de 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.kt @@ -2,10 +2,10 @@ package com.gh.gamecenter.entity import android.os.Parcel import android.os.Parcelable - import com.google.gson.annotations.SerializedName +import java.util.* -class NewsEntity : Parcelable { +class NewsEntity : Parcelable, Cloneable { @SerializedName(value = "_id", alternate = arrayOf("article_id")) var id: String? = null @@ -34,6 +34,10 @@ class NewsEntity : Parcelable { var priority: Int = 0 + override fun clone(): Any { + return super.clone() + } + override fun describeContents(): Int { return 0 @@ -75,7 +79,17 @@ class NewsEntity : Parcelable { const val TAG: String = "NewsEntity" - @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { + fun deepCopy(list: List?): List? { + if (list == null) return null + val copy = ArrayList() + for (t in list) { + copy.add(t.clone() as NewsEntity) + } + return copy + } + + @JvmField + val CREATOR: Parcelable.Creator = object : Parcelable.Creator { override fun createFromParcel(source: Parcel): NewsEntity { return NewsEntity(source) } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java index 4d7aa42da3..819ed4ee79 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java @@ -211,7 +211,7 @@ public class FuLiAdapter extends BaseRecyclerAdapter { private void getToolTox() { RetrofitManager.getInstance(mContext) .getApi() - .getGameToolBoxData(0, UrlFilterUtils.getFilterQuery("game_id", mGameEntity.getId())) + .getGameToolBoxData(1, UrlFilterUtils.getFilterQuery("game_id", mGameEntity.getId())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -228,7 +228,7 @@ public class FuLiAdapter extends BaseRecyclerAdapter { // 获取游戏新闻 private void getGameNews() { RetrofitManager.getInstance(mContext).getApi() - .getGameNews(UrlFilterUtils.getFilterQuery("game_id", mGameEntity.getId()), 3, 0) + .getGameNews(UrlFilterUtils.getFilterQuery("game_id", mGameEntity.getId()), 3, 1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -271,7 +271,7 @@ public class FuLiAdapter extends BaseRecyclerAdapter { private void addLibaoList() { if (mGameEntity == null) return; RetrofitManager.getInstance(mContext).getApi() - .getLibaoByGame(UrlFilterUtils.getFilterQuery("game_id", mGameEntity.getId()), 0, 128) + .getLibaoByGame(UrlFilterUtils.getFilterQuery("game_id", mGameEntity.getId()), 1, 128) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @@ -510,7 +510,7 @@ public class FuLiAdapter extends BaseRecyclerAdapter { private void initLibaoViewHolder(GameDetaiLibaoViewHolder viewHolder) { viewHolder.libaoRv.setNestedScrollingEnabled(false); - if (mLibaoList != null && (mLibaoList.size() <= 2 || isOpenLiBaoList)) { + if (mLibaoList != null && (mLibaoList.size() <= 3 || isOpenLiBaoList)) { viewHolder.openList.setVisibility(View.GONE); } else { viewHolder.openList.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/gh/gamecenter/info/ConcernAdapter.java b/app/src/main/java/com/gh/gamecenter/info/ConcernAdapter.java index 1a4305056e..608eb284b2 100644 --- a/app/src/main/java/com/gh/gamecenter/info/ConcernAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/info/ConcernAdapter.java @@ -72,6 +72,8 @@ class ConcernAdapter extends BaseRecyclerAdapter { private boolean isOver; private boolean isNetworkError; + private int mPage; + ConcernAdapter(Context context, OnRequestCallBackListener listener, OnListClickListener mistListener) { super(context); this.listener = listener; @@ -82,15 +84,16 @@ class ConcernAdapter extends BaseRecyclerAdapter { itemCount = 0; skipPosition = -1; + mPage = 1; isNetworkError = false; isOver = false; isLoading = false; - addList(0); + addList(); } // 加载数据 - public void addList(final int offset) { + public void addList() { if (isLoading) { return; } @@ -102,7 +105,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { } isLoading = true; RetrofitManager.getInstance(mContext).getApi() - .getZiXunConcern(UserManager.getInstance().getUserId(), offset) + .getZiXunConcern(UserManager.getInstance().getUserId(), mPage) .map(new Func1, List>() { @Override public List call(List list) { @@ -115,16 +118,14 @@ class ConcernAdapter extends BaseRecyclerAdapter { .subscribe(new Response>() { @Override public void onResponse(List response) { - isLoading = false; - if (response.size() != 0) { concernList.addAll(response); itemCount += response.size(); notifyItemRangeInserted(concernList.size() - response.size(), response.size()); getLibaoStatus(response); - getNewsViews(response, offset); - getNewsCommentnum(response, offset); + getNewsViews(response); + getNewsCommentnum(response); } else { isOver = true; @@ -136,13 +137,16 @@ class ConcernAdapter extends BaseRecyclerAdapter { } - if (offset == 0 && listener != null) { + if (mPage == 1 && listener != null) { if (concernList.isEmpty()) { listener.loadEmpty(); } else { listener.loadDone(); } } + + isLoading = false; + mPage ++; } @Override @@ -150,7 +154,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { isLoading = false; // 网络错误 - if (offset == 0) { + if (mPage == 1) { if (listener != null) { listener.loadError(); } @@ -211,7 +215,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { } // 获取新闻阅读量 - private void getNewsViews(final List list, final int start) { + private void getNewsViews(final List list) { if (list == null || list.isEmpty()) { return; } @@ -253,7 +257,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { .subscribe(new Response() { @Override public void onResponse(String response) { - notifyItemRangeChanged(start, list.size()); + notifyDataSetChanged(); } }); } @@ -261,7 +265,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { } // 获取新闻评论数 - private void getNewsCommentnum(final List list, final int start) { + private void getNewsCommentnum(final List list) { if (list == null || list.isEmpty()) { return; } @@ -302,7 +306,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { .subscribe(new Response() { @Override public void onResponse(String response) { - notifyItemRangeChanged(start, list.size()); + notifyDataSetChanged(); } }); } @@ -465,7 +469,7 @@ class ConcernAdapter extends BaseRecyclerAdapter { public void onClick(View v) { isNetworkError = false; notifyItemChanged(getItemCount() - 1); - addList(concernList.size()); + addList(); } }); } else if (isOver) { diff --git a/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java b/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java index 54b6ad7ab3..eb4b3813a4 100644 --- a/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java +++ b/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java @@ -108,7 +108,6 @@ public class ConcernFragment extends NormalFragment implements SwipeRefreshLayou public void run() { mAdapter = new ConcernAdapter(getContext(), ConcernFragment.this, ConcernFragment.this); recyclerView.setAdapter(mAdapter); - mAdapter.addList(0); } }; @@ -147,7 +146,7 @@ public class ConcernFragment extends NormalFragment implements SwipeRefreshLayou if (newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findLastVisibleItemPosition() + 1 == mAdapter.getItemCount()) { if (!mAdapter.isOver() && !mAdapter.isLoading() && !mAdapter.isNetworkError()) { - mAdapter.addList(mAdapter.getConcernListSize()); + mAdapter.addList(); } } } @@ -490,7 +489,7 @@ public class ConcernFragment extends NormalFragment implements SwipeRefreshLayou } else if (mAdapter.isNetworkError()) { mAdapter.setNetworkError(false); mAdapter.notifyItemChanged(mAdapter.getItemCount() - 1); - mAdapter.addList(mAdapter.getConcernListSize()); + mAdapter.addList(); } } } @@ -524,9 +523,7 @@ public class ConcernFragment extends NormalFragment implements SwipeRefreshLayou refreshLayout.setRefreshing(true); recyclerView.setVisibility(View.VISIBLE); loadingLayout.setVisibility(View.VISIBLE); - mAdapter = new ConcernAdapter(getContext(), this, this); - recyclerView.setAdapter(mAdapter); - mAdapter.addList(0); + postRunnable(mRunnable); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/info/InFoViewModel.java b/app/src/main/java/com/gh/gamecenter/info/InFoViewModel.java index 3ffd686e9a..7155b2e490 100644 --- a/app/src/main/java/com/gh/gamecenter/info/InFoViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/info/InFoViewModel.java @@ -25,10 +25,14 @@ public class InFoViewModel extends ListViewModel { super(application); mResultLiveData.addSource(mListLiveData, list -> { if (list == null) return; + mResultLiveData.postValue(NewsEntity.Companion.deepCopy(list)); StringBuilder builder = new StringBuilder(); - for (int i = 0, size = list.size(); i < size; i++) { - builder.append(list.get(i).getId()); - builder.append("-"); + for (int i = 0; i < list.size(); i++) { + NewsEntity newsEntity = list.get(i); + if (newsEntity.getViews() == 0) { + builder.append(newsEntity.getId()); + builder.append("-"); + } } builder.deleteCharAt(builder.length() - 1); String ids = builder.toString(); @@ -38,7 +42,6 @@ public class InFoViewModel extends ListViewModel { LiveData> listLiveData = mNewsViewsRepository.asLiveData(); mResultLiveData.addSource(listLiveData, viewsEntities -> { - // todo 此处有问题 List value = mListLiveData.getValue(); if (value != null && viewsEntities != null) for (ViewsEntity viewsEntity : viewsEntities) { @@ -49,7 +52,7 @@ public class InFoViewModel extends ListViewModel { } } } - mResultLiveData.postValue(value); + mResultLiveData.postValue(NewsEntity.Companion.deepCopy(value)); }); } diff --git a/app/src/main/java/com/gh/gamecenter/info/InfoAdapter.java b/app/src/main/java/com/gh/gamecenter/info/InfoAdapter.java index 4e5ef5f32a..6b4c5cddd3 100644 --- a/app/src/main/java/com/gh/gamecenter/info/InfoAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/info/InfoAdapter.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.info; import android.content.Context; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; @@ -45,19 +46,29 @@ class InfoAdapter extends ListAdapter { this.mListListener = listListener; } + @Override + protected boolean areItemsTheSame(NewsEntity oldItem, NewsEntity newItem) { + return !TextUtils.isEmpty(oldItem.getId()) && oldItem.getId().equals(newItem.getId()); + } + + @Override + protected boolean areContentsTheSame(NewsEntity oldItem, NewsEntity newItem) { + return oldItem.getViews() == newItem.getViews(); + } + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { case ItemViewType.NEWS_IMAGE1: view = mLayoutInflater.inflate(R.layout.news_image1_item, parent, false); - return new NewsImage1ViewHolder(view, mEntityList, mListListener); + return new NewsImage1ViewHolder(view, mListListener); case ItemViewType.NEWS_IMAGE2: view = mLayoutInflater.inflate(R.layout.news_image2_item, parent, false); - return new NewsImage2ViewHolder(view, mEntityList, mListListener); + return new NewsImage2ViewHolder(view, mListListener); case ItemViewType.NEWS_IMAGE3: view = mLayoutInflater.inflate(R.layout.news_image3_item, parent, false); - return new NewsImage3ViewHolder(view, mEntityList, mListListener); + return new NewsImage3ViewHolder(view, mListListener); case ItemViewType.LOADING: view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view, null, mListListener); @@ -89,6 +100,7 @@ class InfoAdapter extends ListAdapter { private void initNewsImage1ViewHolder(final NewsImage1ViewHolder viewHolder, int position) { final NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); ImageUtils.Companion.display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0)); viewHolder.title.setText(newsEntity.getTitle()); int views = newsEntity.getViews(); @@ -104,7 +116,7 @@ class InfoAdapter extends ListAdapter { private void initNewsImage2ViewHolder(final NewsImage2ViewHolder viewHolder, int position) { final NewsEntity newsEntity = mEntityList.get(position); - + viewHolder.setClickData(newsEntity); DisplayMetrics outMetrics = new DisplayMetrics(); int width = (outMetrics.widthPixels - DisplayUtils.dip2px(mContext, 56)) / 3; int height = (int) (width * 3 / 4f); @@ -138,7 +150,7 @@ class InfoAdapter extends ListAdapter { private void initNewsImage3ViewHolder(final NewsImage3ViewHolder viewHolder, int position) { final NewsEntity newsEntity = mEntityList.get(position); - + viewHolder.setClickData(newsEntity); viewHolder.title.setText(newsEntity.getTitle()); ImageUtils.Companion.getInstance().display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0), mContext.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(mContext, 40)); diff --git a/app/src/main/java/com/gh/gamecenter/info/InfoFragment.java b/app/src/main/java/com/gh/gamecenter/info/InfoFragment.java index d1f42bed63..e65db39079 100644 --- a/app/src/main/java/com/gh/gamecenter/info/InfoFragment.java +++ b/app/src/main/java/com/gh/gamecenter/info/InfoFragment.java @@ -35,8 +35,7 @@ public class InfoFragment extends ListFragment, InFoViewModel> if (mAdapter.isNetworkError()) mListViewModel.load(LoadType.RETRY); return; } - List newsList = (List) data; - NewsEntity newsEntity = newsList.get(position); + NewsEntity newsEntity = (NewsEntity) data; Map kv = new HashMap<>(); kv.put("名字", newsEntity.getTitle()); kv.put("位置", String.valueOf(position + 1)); diff --git a/app/src/main/java/com/gh/gamecenter/info/NewsViewsRepository.java b/app/src/main/java/com/gh/gamecenter/info/NewsViewsRepository.java index 37123b59d7..0b5b02c7fd 100644 --- a/app/src/main/java/com/gh/gamecenter/info/NewsViewsRepository.java +++ b/app/src/main/java/com/gh/gamecenter/info/NewsViewsRepository.java @@ -7,6 +7,7 @@ import com.gh.gamecenter.retrofit.Response; import java.util.List; +import retrofit2.HttpException; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @@ -29,6 +30,11 @@ public class NewsViewsRepository { public void onResponse(List response) { result.postValue(response); } + + @Override + public void onFailure(HttpException e) { + result.postValue(null); + } }); } diff --git a/app/src/main/java/com/gh/gamecenter/info/OriginalAdapter.java b/app/src/main/java/com/gh/gamecenter/info/OriginalAdapter.java index 9897668327..1f1b240987 100644 --- a/app/src/main/java/com/gh/gamecenter/info/OriginalAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/info/OriginalAdapter.java @@ -2,15 +2,13 @@ package com.gh.gamecenter.info; import android.content.Context; import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; +import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.gh.base.OnListClickListener; -import com.gh.base.OnRequestCallBackListener; -import com.gh.common.constant.Config; import com.gh.common.constant.ItemViewType; import com.gh.common.util.DisplayUtils; import com.gh.common.util.ImageUtils; @@ -20,29 +18,18 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsImage1ViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsImage2ViewHolder; import com.gh.gamecenter.adapter.viewholder.NewsImage3ViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.entity.ViewsEntity; import com.gh.gamecenter.manager.VisitManager; import com.gh.gamecenter.retrofit.JSONObjectResponse; -import com.gh.gamecenter.retrofit.ObservableUtil; -import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.adapter.BaseRecyclerAdapter; -import com.lightgame.utils.Utils; import org.json.JSONException; import org.json.JSONObject; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; -import retrofit2.HttpException; -import rx.Observable; -import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; -import rx.functions.Func1; import rx.schedulers.Schedulers; @@ -50,31 +37,24 @@ import rx.schedulers.Schedulers; * Created by khy on 2016/6/30. * 资讯-原创-数据适配器 */ -class OriginalAdapter extends BaseRecyclerAdapter { +class OriginalAdapter extends ListAdapter { - private OnRequestCallBackListener listener; private OnListClickListener mListListener; - private List newsList; - private int itemCount; - - private boolean isLoading; - private boolean isOver; - private boolean isNetworkError; - - OriginalAdapter(Context context, OnRequestCallBackListener listener, OnListClickListener listListener) { + OriginalAdapter(Context context, OnListClickListener listListener) { super(context); - this.listener = listener; this.mListListener = listListener; + } - newsList = new ArrayList<>(); + @Override + protected boolean areItemsTheSame(NewsEntity oldItem, NewsEntity newItem) { + return !TextUtils.isEmpty(oldItem.getId()) && oldItem.getId().equals(newItem.getId()); + } - itemCount = 0; - - isLoading = false; - isOver = false; - isNetworkError = false; + @Override + protected boolean areContentsTheSame(NewsEntity oldItem, NewsEntity newItem) { + return oldItem.getViews() == newItem.getViews(); } @Override @@ -83,13 +63,13 @@ class OriginalAdapter extends BaseRecyclerAdapter { switch (viewType) { case ItemViewType.NEWS_IMAGE1: view = mLayoutInflater.inflate(R.layout.news_image1_item, parent, false); - return new NewsImage1ViewHolder(view, newsList, mListListener); + return new NewsImage1ViewHolder(view, mListListener); case ItemViewType.NEWS_IMAGE2: view = mLayoutInflater.inflate(R.layout.news_image2_item, parent, false); - return new NewsImage2ViewHolder(view, newsList, mListListener); + return new NewsImage2ViewHolder(view, mListListener); case ItemViewType.NEWS_IMAGE3: view = mLayoutInflater.inflate(R.layout.news_image3_item, parent, false); - return new NewsImage3ViewHolder(view, newsList, mListListener); + return new NewsImage3ViewHolder(view, mListListener); case ItemViewType.LOADING: view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view); @@ -107,13 +87,16 @@ class OriginalAdapter extends BaseRecyclerAdapter { } else if (holder instanceof NewsImage3ViewHolder) { initNewsImage3ViewHolder((NewsImage3ViewHolder) holder, position); } else if (holder instanceof FooterViewHolder) { - initFooterViewHolder((FooterViewHolder) holder); + FooterViewHolder footerViewHolder = (FooterViewHolder) holder; + footerViewHolder.initItemPadding(); + footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); } } private void initNewsImage1ViewHolder(final NewsImage1ViewHolder viewHolder, int position) { - NewsEntity newsEntity = newsList.get(position); + NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); ImageUtils.Companion.display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0)); viewHolder.title.setText(newsEntity.getTitle()); int views = newsEntity.getViews(); @@ -128,8 +111,8 @@ class OriginalAdapter extends BaseRecyclerAdapter { private void initNewsImage2ViewHolder(final NewsImage2ViewHolder viewHolder, int position) { - NewsEntity newsEntity = newsList.get(position); - + NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); DisplayMetrics outMetrics = new DisplayMetrics(); int width = (outMetrics.widthPixels - DisplayUtils.dip2px(mContext, 56)) / 3; int height = (int) (width * 3 / 4f); @@ -161,7 +144,8 @@ class OriginalAdapter extends BaseRecyclerAdapter { private void initNewsImage3ViewHolder(final NewsImage3ViewHolder viewHolder, int position) { - NewsEntity newsEntity = newsList.get(position); + NewsEntity newsEntity = mEntityList.get(position); + viewHolder.setClickData(newsEntity); viewHolder.title.setText(newsEntity.getTitle()); ImageUtils.Companion.getInstance().display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0), mContext.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(mContext, 40)); @@ -175,31 +159,6 @@ class OriginalAdapter extends BaseRecyclerAdapter { NewsUtils.setNewsType(viewHolder.type, newsEntity.getType(), newsEntity.getPriority(), position); } - private void initFooterViewHolder(FooterViewHolder viewHolder) { - viewHolder.initItemPadding(); - if (isNetworkError) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_failed_retry); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 1); - addList(newsList.size()); - } - }); - } else if (isOver) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText(R.string.loading_complete); - viewHolder.itemView.setClickable(false); - } else { - viewHolder.loading.setVisibility(View.VISIBLE); - viewHolder.hint.setText(R.string.loading); - viewHolder.itemView.setClickable(false); - } - } - public void statNewsViews(final NewsEntity newsEntity, final int position) { RetrofitManager.getInstance(mContext).getData().postNewsViews(newsEntity.getId()) .subscribeOn(Schedulers.io()) @@ -225,117 +184,13 @@ class OriginalAdapter extends BaseRecyclerAdapter { }); } - public void addList(final int offset) { - if (isLoading) { - return; - } - isLoading = true; - RetrofitManager.getInstance(mContext).getApi() - .getYuanChuang(offset) - .map(new Func1, List>() { - @Override - public List call(List list) { - Config.filterPluginArticle(list); - // 去掉重复数据 - return NewsUtils.removeDuplicateData(newsList, list); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - isLoading = false; - - if (response.size() != 0) { - newsList.addAll(response); - itemCount += response.size(); - notifyItemRangeInserted(newsList.size() - response.size(), response.size()); - } else { - isOver = true; - notifyItemChanged(getItemCount() - 1); - } - - if (offset == 0 && listener != null) { - listener.loadDone(); - } - - // 获取新闻阅读量 - getNewsViews(response, offset); - } - - @Override - public void onFailure(HttpException e) { - isLoading = false; - // 网络错误 - if (offset == 0) { - if (listener != null) { - listener.loadError(); - } - } else { - Utils.toast(mContext, R.string.loading_failed_hint); - isNetworkError = true; - notifyItemChanged(getItemCount() - 1); - } - } - }); - } - - private void getNewsViews(final List list, final int start) { - if (list == null || list.isEmpty()) { - return; - } - ObservableUtil.computation(new Observable.OnSubscribe() { - @Override - public void call(Subscriber subscriber) { - StringBuilder builder = new StringBuilder(); - for (int i = 0, size = list.size(); i < size; i++) { - builder.append(list.get(i).getId()); - builder.append("-"); - } - builder.deleteCharAt(builder.length() - 1); - String ids = builder.toString(); - VisitManager.getInstance().addUrl(ids); - subscriber.onNext(ids); - subscriber.onCompleted(); - } - }, new Action1() { - @Override - public void call(String ids) { - RetrofitManager.getInstance(mContext).getData() - .getNewsViews(ids) - .map(new Func1, String>() { - @Override - public String call(List list) { - for (ViewsEntity viewsEntity : list) { - for (NewsEntity newsEntity : newsList) { - if (viewsEntity.getId().equals(newsEntity.getId())) { - newsEntity.setViews(viewsEntity.getViews()); - break; - } - } - } - return null; - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(String response) { - notifyItemRangeChanged(start, list.size()); - } - }); - } - }); - } @Override public int getItemViewType(int position) { - if (position == newsList.size()) { + if (position == mEntityList.size()) { return ItemViewType.LOADING; } - NewsEntity newsEntity = newsList.get(position); + NewsEntity newsEntity = mEntityList.get(position); if ("4x3".equals(newsEntity.getThumbnail().getType()) && newsEntity.getThumbnail().getUrl().size() == 3) { return ItemViewType.NEWS_IMAGE2; } @@ -347,29 +202,6 @@ class OriginalAdapter extends BaseRecyclerAdapter { @Override public int getItemCount() { - if (itemCount == 0) { - return 0; - } - return itemCount + 1; - } - - public boolean isOver() { - return isOver; - } - - public boolean isLoading() { - return isLoading; - } - - public boolean isNetworkError() { - return isNetworkError; - } - - public void setNetworkError(boolean networkError) { - isNetworkError = networkError; - } - - public int getNewsListSize() { - return newsList.size(); + return mEntityList == null ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } } diff --git a/app/src/main/java/com/gh/gamecenter/info/OriginalFragment.java b/app/src/main/java/com/gh/gamecenter/info/OriginalFragment.java index 97a72112ac..236e540580 100644 --- a/app/src/main/java/com/gh/gamecenter/info/OriginalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/info/OriginalFragment.java @@ -1,162 +1,72 @@ package com.gh.gamecenter.info; -import android.os.Bundle; -import android.support.annotation.Nullable; -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.LinearLayout; -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DataCollectionUtils; -import com.gh.gamecenter.DataUtils; import com.gh.common.util.StringUtils; -import com.gh.common.view.VerticalItemDecoration; +import com.gh.gamecenter.DataUtils; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadType; import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBUISwitch; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.HashMap; -import java.util.List; import java.util.Map; -import butterknife.BindView; -import butterknife.OnClick; - /** * Created by khy on 2016/6/29. * 资讯-原创界面 */ -public class OriginalFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { +public class OriginalFragment extends ListFragment { - @BindView(R.id.original_srl_refresh) - SwipeRefreshLayout refreshLayout; - @BindView(R.id.original_rv_list) - RecyclerView recyclerView; - @BindView(R.id.original_pb_loading) - ProgressBarCircularIndeterminate loadingLayout; - @BindView(R.id.reuse_no_connection) - LinearLayout noConnectionLayout; - - private LinearLayoutManager layoutManager; - private OriginalAdapter adapter; - - Runnable runnable = new Runnable() { - @Override - public void run() { - adapter = new OriginalAdapter(getContext(), OriginalFragment.this, OriginalFragment.this); - recyclerView.setAdapter(adapter); - adapter.addList(0); - } - }; + private OriginalAdapter mAdapter; @Override - protected int getLayoutId() { - return R.layout.fragment_info_original; + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new OriginalAdapter(getContext(), this) : mAdapter; } - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - refreshLayout.setColorSchemeResources(R.color.theme); - refreshLayout.setOnRefreshListener(this); - - recyclerView.setHasFixedSize(true); - layoutManager = new LinearLayoutManager(getActivity()); - recyclerView.setLayoutManager(layoutManager); - adapter = new OriginalAdapter(getContext(), this, this); - recyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); - recyclerView.setAdapter(adapter); - recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE - && layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { - if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) { - adapter.addList(adapter.getNewsListSize()); - } - } - } - }); - } - - @Override - public void loadDone() { // 数据加载成功回调 - refreshLayout.setRefreshing(false); - loadingLayout.setVisibility(View.GONE); - } - - @Override - public void loadError() { // 数据加载失败回调 - refreshLayout.setRefreshing(false); - loadingLayout.setVisibility(View.GONE); - recyclerView.setVisibility(View.GONE); - noConnectionLayout.setVisibility(View.VISIBLE); - } // 连接上网络事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (noConnectionLayout.getVisibility() == View.VISIBLE) { - reconnection(); - } else if (adapter.isNetworkError()) { - adapter.setNetworkError(false); - adapter.notifyItemChanged(adapter.getItemCount() - 1); - adapter.addList(adapter.getNewsListSize()); - } - } - } - - @OnClick(R.id.reuse_no_connection) - public void reconnection() { // 重新连接 - refreshLayout.setRefreshing(true); - recyclerView.setVisibility(View.VISIBLE); - loadingLayout.setVisibility(View.VISIBLE); - noConnectionLayout.setVisibility(View.GONE); - postDelayedRunnable(runnable, 1000); - } - - // 资讯Fragment界面切换事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBUISwitch busNine) { - if (InfoToolWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { - if (busNine.getPosition() == InfoWrapperFragment.INDEX_ORIGINAL) { - if (loadingLayout.getVisibility() == View.VISIBLE) { - adapter.addList(0); - } - } - } - } - - @Override - public void onRefresh() { // 刷新 - postDelayedRunnable(runnable, 1000); +// if (busNetworkState.isNetworkConnected()) { +// if (noConnectionLayout.getVisibility() == View.VISIBLE) { +// reconnection(); +// } else if (adapter.isNetworkError()) { +// adapter.setNetworkError(false); +// adapter.notifyItemChanged(adapter.getItemCount() - 1); +// adapter.addList(adapter.getNewsListSize()); +// } +// } } @Override public void onListClick(View view, int position, Object data) { super.onListClick(view, position, data); - List newsList = (List) data; - NewsEntity newsEntity = newsList.get(position); - Map kv = new HashMap<>(); - kv.put("名字", newsEntity.getTitle()); - kv.put("位置", String.valueOf(position + 1)); - DataUtils.onEvent(getContext(), "点击", "资讯-原创", kv); + if (view.getId() == R.id.footerview_item) { + if (mAdapter.isNetworkError()) { + mListViewModel.load(LoadType.RETRY); + } + } else { + NewsEntity newsEntity = (NewsEntity) data; + Map kv = new HashMap<>(); + kv.put("名字", newsEntity.getTitle()); + kv.put("位置", String.valueOf(position + 1)); + DataUtils.onEvent(getContext(), "点击", "资讯-原创", kv); - DataCollectionUtils.uploadClick(getContext(), "列表", "资讯-原创", newsEntity.getTitle()); + DataCollectionUtils.uploadClick(getContext(), "列表", "资讯-原创", newsEntity.getTitle()); - //统计阅读量 - adapter.statNewsViews(newsEntity, position); - NewsDetailActivity.startNewsDetailActivity(getContext(), newsEntity, - StringUtils.buildString("(资讯:原创[" + position + "])")); + //统计阅读量 + mAdapter.statNewsViews(newsEntity, position); + NewsDetailActivity.startNewsDetailActivity(getContext(), newsEntity, + StringUtils.buildString("(资讯:原创[" + position + "])")); + } } } diff --git a/app/src/main/java/com/gh/gamecenter/info/OriginalViewModel.java b/app/src/main/java/com/gh/gamecenter/info/OriginalViewModel.java new file mode 100644 index 0000000000..ca825a4390 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/info/OriginalViewModel.java @@ -0,0 +1,64 @@ +package com.gh.gamecenter.info; + +import android.app.Application; +import android.arch.lifecycle.LiveData; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.entity.ViewsEntity; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 19/03/18. + */ + +public class OriginalViewModel extends ListViewModel { + + NewsViewsRepository mNewsViewsRepository = new NewsViewsRepository<>(); + + public OriginalViewModel(@NonNull Application application) { + super(application); + mResultLiveData.addSource(mListLiveData, list -> { + if (list == null) return; + mResultLiveData.postValue(NewsEntity.Companion.deepCopy(list)); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < list.size(); i++) { + NewsEntity newsEntity = list.get(i); + if (newsEntity.getViews() == 0) { + builder.append(newsEntity.getId()); + builder.append("-"); + } + } + builder.deleteCharAt(builder.length() - 1); + String ids = builder.toString(); + + mNewsViewsRepository.getNewsViews(RetrofitManager.getInstance(getApplication()).getData().getNewsViews(ids)); + }); + + LiveData> listLiveData = mNewsViewsRepository.asLiveData(); + mResultLiveData.addSource(listLiveData, viewsEntities -> { + List value = mListLiveData.getValue(); + if (value != null && viewsEntities != null) + for (ViewsEntity viewsEntity : viewsEntities) { + for (NewsEntity newsEntity : value) { + if (viewsEntity.getId().equals(newsEntity.getId())) { + newsEntity.setViews(viewsEntity.getViews()); + break; + } + } + } + mResultLiveData.postValue(NewsEntity.Companion.deepCopy(value)); + }); + } + + @Override + public Observable> provideDataObservable(int offset) { + return RetrofitManager.getInstance(getApplication()).getApi().getYuanChuang(offset); + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/info/StrategyAdapter.java b/app/src/main/java/com/gh/gamecenter/info/StrategyAdapter.java index 9f55718310..8d10ff0a2f 100644 --- a/app/src/main/java/com/gh/gamecenter/info/StrategyAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/info/StrategyAdapter.java @@ -42,7 +42,9 @@ class StrategyAdapter extends BaseRecyclerAdapter { private boolean isLoading; private boolean isNetworkError; - StrategyAdapter(Context context, OnRequestCallBackListener callBackListener, OnListClickListener listListener ) { + private int mPage; + + StrategyAdapter(Context context, OnRequestCallBackListener callBackListener, OnListClickListener listListener) { super(context); this.mCallBackListener = callBackListener; this.mListListener = listListener; @@ -51,6 +53,7 @@ class StrategyAdapter extends BaseRecyclerAdapter { isLoading = false; isRemove = false; isNetworkError = false; + mPage = 1; } @Override @@ -107,23 +110,18 @@ class StrategyAdapter extends BaseRecyclerAdapter { isNetworkError = false; footerViewHolder.hint.setText(R.string.loading); footerViewHolder.loading.setVisibility(View.VISIBLE); - addList(mNewsList.size()); + addList(); } } }); } } - public void addList(final int offset) { + public void addList() { isLoading = true; - if (offset == 0) { - mNewsList.clear(); - notifyDataSetChanged(); - } - RetrofitManager.getInstance(mContext) .getApi() - .getNews("攻略", 20, offset) + .getNews("攻略", 20, mPage) .map(new Func1, List>() { @Override public List call(List newsEntities) { @@ -157,13 +155,15 @@ class StrategyAdapter extends BaseRecyclerAdapter { } else { mCallBackListener.loadDone(); } + + mPage++; isLoading = false; } @Override public void onFailure(HttpException e) { isLoading = false; - if (offset == 0) { + if (mPage == 1) { mCallBackListener.loadError(); } else { isNetworkError = true; diff --git a/app/src/main/java/com/gh/gamecenter/info/StrategyFragment.java b/app/src/main/java/com/gh/gamecenter/info/StrategyFragment.java index a852213510..78d83a85a7 100644 --- a/app/src/main/java/com/gh/gamecenter/info/StrategyFragment.java +++ b/app/src/main/java/com/gh/gamecenter/info/StrategyFragment.java @@ -83,7 +83,7 @@ public class StrategyFragment extends BaseFragment implements SwipeRefreshLayout public void run() { mStrategyAdapter = new StrategyAdapter(getContext(), StrategyFragment.this, StrategyFragment.this); mStrategyRv.setAdapter(mStrategyAdapter); - mStrategyAdapter.addList(0); + mStrategyAdapter.addList(); } }; @@ -112,7 +112,7 @@ public class StrategyFragment extends BaseFragment implements SwipeRefreshLayout super.onScrollStateChanged(recyclerView, newState); if (mLayoutManager.findLastVisibleItemPosition() + 1 == mStrategyAdapter.getItemCount() && newState == RecyclerView.SCROLL_STATE_IDLE && mStrategyAdapter.isCanLoading()) { - mStrategyAdapter.addList(mStrategyAdapter.getItemCount() - 1); + mStrategyAdapter.addList(); } } }); @@ -248,7 +248,7 @@ public class StrategyFragment extends BaseFragment implements SwipeRefreshLayout public void onEventMainThread(EBUISwitch busNine) { if (InfoToolWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == InfoWrapperFragment.INDEX_STRATEGY && mLoading.getVisibility() == View.VISIBLE) { - mStrategyAdapter.addList(0); + mStrategyAdapter.addList(); if (!TextUtils.isEmpty(UserManager.getInstance().getToken())) { getConcernGame(); } diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java index c281b1bd11..11a5bbbe6f 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java @@ -61,6 +61,7 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { private String entrance; private int mDataCount; + private int mPage; private boolean mIsRemove; private boolean mIsNetworkError; @@ -75,15 +76,16 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { mOnCallBackListener = onCallBackListener; mLocationMap = new ArrayMap<>(); mEntityList = new ArrayList<>(); + mPage = 1; } - public void addList(int offset) { + public void addList() { mIsLoaded = false; RetrofitManager.getInstance(mContext).getApi() - .getKaiFuData(mGameId, mDay, offset, 20) + .getKaiFuData(mGameId, mDay, mPage, 20) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>(){ + .subscribe(new Response>() { @Override public void onResponse(List response) { super.onResponse(response); @@ -131,7 +133,7 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { if (time != nextTime) { GameEntity kaiFuTimeEntity = new GameEntity(); kaiFuTimeEntity.setKaifuTimeHint(nextTime); - response.add(i + 1,kaiFuTimeEntity); + response.add(i + 1, kaiFuTimeEntity); i++; } } @@ -154,6 +156,7 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { mOnCallBackListener.loadDone(); } + mPage++; mIsLoaded = true; } @@ -223,7 +226,7 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { GameEntity gameEntity = mEntityList.get(position); GameTestViewHolder viewHolder = (GameTestViewHolder) holder; initGameTestViewHolder(gameEntity, viewHolder); - } else if (holder instanceof KaiFuTimeViewHolder){ + } else if (holder instanceof KaiFuTimeViewHolder) { GameEntity gameEntity = mEntityList.get(position); SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH:mm", Locale.CHINA); ((KaiFuTimeViewHolder) holder).time.setText(dateFm.format(gameEntity.getKaifuTimeHint() * 1000)); @@ -234,7 +237,6 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { } - @Override public int getItemCount() { if (mEntityList.size() == 0) { @@ -352,7 +354,7 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { public void onClick(View v) { mIsNetworkError = false; notifyItemChanged(getItemCount() - 1); - addList(mDataCount); + addList(); } }); } else if (mIsRemove) { diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java index 73418ade2a..a3f6a07992 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java @@ -117,7 +117,7 @@ public class KaiFuVpFragment extends BaseFragment { super.onScrollStateChanged(recyclerView, newState); if (mLayoutManager.findLastVisibleItemPosition() == mAdapter.getItemCount() - 1 && newState == RecyclerView.SCROLL_STATE_IDLE && !mAdapter.isRemove() && mAdapter.isLoaded()) { - mAdapter.addList(mAdapter.getDataListCount()); + mAdapter.addList(); } if (newState == RecyclerView.SCROLL_STATE_IDLE) { @@ -181,7 +181,7 @@ public class KaiFuVpFragment extends BaseFragment { } }, 500); } else if (mLoading.getVisibility() == View.VISIBLE) { - mAdapter.addList(0); + mAdapter.addList(); } } else { mIsRefershDownload = false; diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java index 1ba2e961e4..9fd1d1171c 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java @@ -66,7 +66,7 @@ public class Libao2Fragment extends BaseFragment implements SwipeRefreshLayout.O if (getActivity() != null && !getActivity().isFinishing()) { adapter = new Libao2FragmentAdapter(getContext(), Libao2Fragment.this, Libao2Fragment.this, mEntrance); mRecyclerView.setAdapter(adapter); - adapter.addList(0); + adapter.addList(); } } }; @@ -96,7 +96,7 @@ public class Libao2Fragment extends BaseFragment implements SwipeRefreshLayout.O if (newState == RecyclerView.SCROLL_STATE_IDLE && mLayoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) { - adapter.addList(adapter.getLibaoListSize()); + adapter.addList(); } } } @@ -190,7 +190,7 @@ public class Libao2Fragment extends BaseFragment implements SwipeRefreshLayout.O if (LibaoWrapperFragment.EB_LIBAOACTIVITY_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == 1) { if (mLoadingLayout.getVisibility() == View.VISIBLE) { - adapter.addList(0); + adapter.addList(); } } } diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java index bf03a199b1..942919697f 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2FragmentAdapter.java @@ -54,7 +54,7 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { private String mEntrance; private int skipPosition; - + private int mPage; Libao2FragmentAdapter(Context context, OnRequestCallBackListener listener, OnListClickListener listListener, String entrance) { @@ -67,6 +67,7 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { mLibaoList = new ArrayList<>(); skipPosition = -1; + mPage = 1; isLoading = false; isNetworkError = false; @@ -74,7 +75,7 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { } // 加载数据 - public void addList(final int offset) { + public void addList() { if (TextUtils.isEmpty(UserManager.getInstance().getToken())) { mCallBackListener.loadDone(null); return; @@ -85,7 +86,7 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { } isLoading = true; - RetrofitManager.getInstance(mContext).getApi().getConcernLibao(UserManager.getInstance().getUserId(), offset) + RetrofitManager.getInstance(mContext).getApi().getConcernLibao(UserManager.getInstance().getUserId(), mPage) .map(new Func1, List>() { @Override public List call(List list) { @@ -100,7 +101,6 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { public void onResponse(List response) { mLibaoList.addAll(response); mCallBackListener.loadDone(); - isLoading = false; if (response.size() < 20) { isOver = true; } @@ -111,6 +111,8 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { mCallBackListener.loadDone(); } notifyDataSetChanged(); + isLoading = false; + mPage++; if (response.size() != 0) { getLibaoStatus(response); @@ -251,6 +253,7 @@ class Libao2FragmentAdapter extends BaseRecyclerAdapter { public void onClick(View v) { isNetworkError = false; notifyItemChanged(getItemCount() - 1); + addList(); } }); } else if (isOver) { diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java index a5676acf39..802cdc92af 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java @@ -13,7 +13,6 @@ import android.widget.TextView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; -import com.gh.gamecenter.LibaoActivity; import com.gh.gamecenter.LoginActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBReuse; @@ -53,7 +52,7 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O public void run() { adapter = new Libao3FragmentAdapter(getActivity(), Libao3Fragment.this, mEntrance); mRecyclerView.setAdapter(adapter); - adapter.loadData(0); + adapter.loadData(); } }; @@ -82,7 +81,7 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O if (newState == RecyclerView.SCROLL_STATE_IDLE && mLayoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) { - adapter.loadData(adapter.getItemCount() - 1); + adapter.loadData(); } } } @@ -153,7 +152,7 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O if (LibaoWrapperFragment.EB_LIBAOACTIVITY_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == 2) { if (mLoadingLayout.getVisibility() == View.VISIBLE) { - adapter.loadData(0); + adapter.loadData(); } } } @@ -163,7 +162,7 @@ public class Libao3Fragment extends BaseFragment implements SwipeRefreshLayout.O @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBReuse changed) { if ("libaoChanged".equals(changed.getType())) { - adapter.loadData(0); + postRunnable(runnable); } else if (LOGIN_TAG.equals(changed.getType())) { // 登入 postRunnable(runnable); } diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java index efa7bfc532..515355e362 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao3FragmentAdapter.java @@ -49,24 +49,27 @@ class Libao3FragmentAdapter extends BaseRecyclerAdapter private boolean isOver; private boolean isNetworkError; + private int mPage; + Libao3FragmentAdapter(Context context, OnRequestCallBackListener listener, String entrance) { super(context); mCallBackListener = listener; mEntrance = entrance; mLibaoList = new ArrayList<>(); + mPage = 1; } - void loadData(int offset) { + void loadData() { if (TextUtils.isEmpty(UserManager.getInstance().getToken())) { mCallBackListener.loadDone(null); return; } - if (offset == 0) { + if (mPage == 1) { mLibaoList.clear(); } RetrofitManager.getInstance(mContext) - .getApi().getCunHaoXiang(UserManager.getInstance().getUserId(), offset) + .getApi().getCunHaoXiang(UserManager.getInstance().getUserId(), mPage) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java index c3ff239728..e0b3c7efc3 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java @@ -44,19 +44,21 @@ public class LibaoHistoryAdapter extends BaseRecyclerAdapter { private boolean isLoading; private boolean isNetworkError; + private int mPage; + public LibaoHistoryAdapter(Context context, OnRequestCallBackListener callBackListener) { super(context); mCallBackListener = callBackListener; - mLibaoList = new ArrayList<>(); - - loadList(0); + mPage = 1; + loadList(); } - public void loadList(int offset) { + public void loadList() { + if (isLoading) return; isLoading = true; RetrofitManager.getInstance(mContext).getApi() - .getHistoryLibao("true", offset) + .getHistoryLibao("true", mPage) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1, List>() { @@ -81,6 +83,7 @@ public class LibaoHistoryAdapter extends BaseRecyclerAdapter { mCallBackListener.loadDone("NULL"); } + mPage++; isLoading = false; isNetworkError = false; if (response.size() != 0) { @@ -168,7 +171,7 @@ public class LibaoHistoryAdapter extends BaseRecyclerAdapter { public void onClick(View v) { isNetworkError = false; notifyItemChanged(getItemCount() - 1); - loadList(mLibaoList.size()); + loadList(); } }); } else if (isOver) { diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt index f5905d7abd..8be5e09203 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewAdapter.kt @@ -43,11 +43,17 @@ class LibaoNewAdapter(context: Context, callBackListener: OnRequestCallBackListe private var isLoading: Boolean = false private var isOver: Boolean = false private var isNetworkError: Boolean = false + private var mPage: Int = 1 - fun addLibaoList(offset: Int) { + init { + mPage = 1 + addLibaoList() + } + + fun addLibaoList() { if (isLoading) return isLoading = true - RetrofitManager.getInstance(mContext).getApi().getLibao(offset).map { list -> + RetrofitManager.getInstance(mContext).getApi().getLibao(mPage).map { list -> // 去掉重复数据 LibaoUtils.removeDuplicateData(mLibaoList, list) } @@ -69,12 +75,13 @@ class LibaoNewAdapter(context: Context, callBackListener: OnRequestCallBackListe mCallBackListener.loadDone() } - isLoading = false - isNetworkError = false - if (response.isNotEmpty()) { getLibaoStatus(response) } + + mPage++ + isLoading = false + isNetworkError = false } override fun onFailure(e: HttpException?) { @@ -171,7 +178,7 @@ class LibaoNewAdapter(context: Context, callBackListener: OnRequestCallBackListe holder.itemView.setOnClickListener({ isNetworkError = false notifyItemChanged(itemCount - 1) - addLibaoList(mLibaoList.size) + addLibaoList() }) } else if (isOver) { holder.loading.visibility = View.GONE diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewFragment.java b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewFragment.java index 753ca7cd5c..d2febe90a9 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoNewFragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoNewFragment.java @@ -64,7 +64,6 @@ public class LibaoNewFragment extends BaseFragment implements SwipeRefreshLayout @Override public void run() { mAdapter = new LibaoNewAdapter(getContext(), LibaoNewFragment.this, LibaoNewFragment.this, mEntrance); - mAdapter.addLibaoList(0); mRecyclerView.setAdapter(mAdapter); } }; @@ -92,7 +91,6 @@ public class LibaoNewFragment extends BaseFragment implements SwipeRefreshLayout mRecyclerView.setLayoutManager(mLayoutManager); mAdapter = new LibaoNewAdapter(getContext(), this, this, mEntrance); - mAdapter.addLibaoList(0); mRecyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, false)); mRecyclerView.setAdapter(mAdapter); @@ -106,7 +104,7 @@ public class LibaoNewFragment extends BaseFragment implements SwipeRefreshLayout } if (!mAdapter.isOver() && !mAdapter.isLoading() && !mAdapter.isNetworkError()) { mIsDone = false; - mAdapter.addLibaoList(mAdapter.getLibaoListSize()); + mAdapter.addLibaoList(); } } @@ -185,7 +183,7 @@ public class LibaoNewFragment extends BaseFragment implements SwipeRefreshLayout && mHistoryLm.findLastVisibleItemPosition() + 1 == mHistoryAdapter.getItemCount()) { if (!mHistoryAdapter.isOver() && !mHistoryAdapter.isLoading() && !mHistoryAdapter.isNetworkError()) { mIsDone = false; - mHistoryAdapter.loadList(mHistoryAdapter.getLibaoListSize()); + mHistoryAdapter.loadList(); } } } diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt index 75c2391876..48df69f43a 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchAdapter.kt @@ -7,10 +7,7 @@ import android.view.ViewGroup import com.gh.base.OnListClickListener import com.gh.base.OnRequestCallBackListener import com.gh.common.constant.ItemViewType -import com.gh.common.util.ImageUtils -import com.gh.common.util.LibaoUtils -import com.gh.common.util.PlatformUtils -import com.gh.common.util.StringUtils +import com.gh.common.util.* import com.gh.gamecenter.R import com.gh.gamecenter.adapter.viewholder.FooterViewHolder import com.gh.gamecenter.adapter.viewholder.LibaoNormalViewHolder @@ -43,12 +40,14 @@ class LibaoSearchAdapter(fragment: LibaoSearchFragment, private var isLoading: Boolean = false private var isOver: Boolean = false private var isNetworkError: Boolean = false + private var mPage: Int = 1 init { - addLibaoList(0) + mPage = 1 + addLibaoList() } - fun addLibaoList(offset: Int) { + fun addLibaoList() { val parentFragment = mFragment.parentFragment var searchKey: String? = null if (parentFragment is Libao1Fragment) { @@ -56,9 +55,10 @@ class LibaoSearchAdapter(fragment: LibaoSearchFragment, } if (isLoading || TextUtils.isEmpty(searchKey)) return - if (offset == 0) mLibaoList.clear() + if (mPage == 1) mLibaoList.clear() isLoading = true - RetrofitManager.getInstance(mContext).getApi().getLibaoBySearch(searchKey, offset).map { list -> + RetrofitManager.getInstance(mContext).getApi(). + getLibaoBySearch(UrlFilterUtils.getFilterQuery("keyword", searchKey), mPage).map { list -> // 去掉重复数据 LibaoUtils.removeDuplicateData(mLibaoList, list) } @@ -80,12 +80,13 @@ class LibaoSearchAdapter(fragment: LibaoSearchFragment, mCallBackListener.loadDone() } - isLoading = false - isNetworkError = false - if (response.isNotEmpty()) { getLibaoStatus(response) } + + mPage++ + isLoading = false + isNetworkError = false } override fun onFailure(e: HttpException?) { @@ -182,7 +183,7 @@ class LibaoSearchAdapter(fragment: LibaoSearchFragment, holder.itemView.setOnClickListener({ isNetworkError = false notifyItemChanged(itemCount - 1) - addLibaoList(mLibaoList.size) + addLibaoList() }) } else if (isOver) { holder.loading.visibility = View.GONE diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchFragment.java b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchFragment.java index 0cde371a5e..3ba9e35cb7 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchFragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoSearchFragment.java @@ -86,7 +86,7 @@ public class LibaoSearchFragment extends BaseFragment implements SwipeRefreshLay if (newState == RecyclerView.SCROLL_STATE_IDLE && mLayoutManager.findLastVisibleItemPosition() + 1 == mAdapter.getItemCount()) { if (!mAdapter.isOver() && !mAdapter.isLoading() && !mAdapter.isNetworkError()) { - mAdapter.addLibaoList(mAdapter.getLibaoListSize()); + mAdapter.addLibaoList(); } } } diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java index 6951bc7956..7e463da462 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java @@ -53,8 +53,8 @@ public class KeFuFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMessageKeFuData(offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMessageKeFuData(page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java index da34afdba0..37198e0865 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java @@ -183,7 +183,7 @@ public class MessageDetailFragment extends NormalFragment implements OnCommentCa && mLayoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) { int offset = adapter.getItemCount() - adapter.getHotCommentListSize() - 3; if (offset >= 10) { // 防止自动上滑时触发 - adapter.addNormalComment(offset); + adapter.addNormalComment(); } } } @@ -242,7 +242,7 @@ public class MessageDetailFragment extends NormalFragment implements OnCommentCa adapter.addConcernEntity(mConcernEntity); adapter.notifyDataSetChanged(); - adapter.addHotComment(0); + adapter.addHotComment(); getNewsViews(); if (commentNum == 0) { diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java index d8f541763d..7d537fdad6 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java @@ -41,8 +41,8 @@ public class MessageFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMessageData(offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMessageData(page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java index 984d27641d..c4a1558f25 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java @@ -79,8 +79,8 @@ public class MessageNormalFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMessage(mMessageType, offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMessage(mMessageType, page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java index fb0123230b..b1e703cc61 100644 --- a/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/NewMessageFragment.java @@ -51,8 +51,8 @@ public class NewMessageFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getMessage("default", offset); + public Observable> provideDataObservable(int page) { + return RetrofitManager.getInstance(getContext()).getApi().getMessage("default", page); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java index 26a69c8c11..80e04f8365 100644 --- a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java @@ -653,7 +653,7 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { private void getNewsComment() { RetrofitManager.getInstance(mContext).getApi() - .getComment(mId, 3, 0) + .getComment(mId, 3, 1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index b38b41be59..7acae87aa6 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -62,26 +62,26 @@ public interface ApiService { * 获取资讯-关注 */ @GET("users/{user_id}/follows/articles") - Observable> getZiXunConcern(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getZiXunConcern(@Path("user_id") String user_id, @Query("page") int page); /** * 获取资讯-资讯 */ @GET("articles?filter=type_group:资讯&view=digest") - Observable> getZiXun(@Query("offset") int offset); // todo 与原创合并 + Observable> getZiXun(@Query("page") int page); // todo 与原创合并 /** * 获取资讯-原创 */ @GET("articles?filter=type_group:原创&view=digest") - Observable> getYuanChuang(@Query("offset") int offset); + Observable> getYuanChuang(@Query("page") int page); /** * 获取资讯-攻略 */ @GET("articles") Observable> getNews(@Query("type_group") String type_group, - @Query("limit") int limit, @Query("offset") int offset); + @Query("limit") int limit, @Query("page") int page); /** * 获取游戏摘要 @@ -130,13 +130,13 @@ public interface ApiService { * 获取游戏更新 */ @GET("games?view=digest") - Observable getGameUpdate(@Query("filter") String filter); // todo(前端自己进行判断) + Observable getGameUpdate(@Query("filter") String filter); /** * 获取游戏更新 */ @GET("games/{gh_id}?view=digest") - Observable getGameUpdateById(@Path("gh_id") String gh_id); // gh_id就是game_id todo(前端自己进行判断) + Observable getGameUpdateById(@Path("gh_id") String gh_id); // gh_id就是game_id // /** // * 获取搜索关键字 @@ -173,14 +173,14 @@ public interface ApiService { */ @GET("articles") Observable> getGameNews(@Query("filter") String filter, @Query("limit") int limit, - @Query("offset") int offset); + @Query("page") int page); // /** // * 获取游戏新闻 // */ // @GET("game/{game_id}/article") // Observable> getGameNews(@Path("game_id") String game_id, @Query("limit") int limit, -// @Query("offset") int offset); +// @Query("page") int page); /** * 获取游戏开服信息 @@ -305,7 +305,7 @@ public interface ApiService { */ @GET("games/servers") Observable> getKaiFuData(@Query("type") String type, @Query("day") String day, - @Query("offset") int offset, @Query("limit") int limit); + @Query("page") int page, @Query("limit") int limit); /** * 获取游戏新闻类型 @@ -313,17 +313,11 @@ public interface ApiService { @GET("games/{game_id}/article_types") Observable> getGameArticleType(@Path("game_id") String gameId); -// /** -// * 获取意见反馈的问题选项 -// */ -// @GET("support/setting/suggestion") -// Observable getSuggestionType(); // todo GET /settings - /** * 获取投票 游戏求版本列表 */ @GET("games/{game_id}/platform_requests") - Observable> getVersionVote(@Path("game_id") String gameId, @Query("offset") int offset, + Observable> getVersionVote(@Path("game_id") String gameId, @Query("page") int page, @Query("limit") int limit); /** @@ -331,26 +325,33 @@ public interface ApiService { */ @Headers({"Content-Type: application/json", "Accept: application/json"}) @POST("games/{game_id}/platform_requests") - Observable postVersionVote(@Body RequestBody body, @Path("game_id") String gameId); // todo POST /games/platform_requests/{version_id}:vote 和 POST /games/{game_id}/platform_requests + Observable addVersionVote(@Body RequestBody body, @Path("game_id") String gameId); + + /** + * 新增求版本 + */ + @Headers({"Content-Type: application/json", "Accept: application/json"}) + @POST("games/platform_requests/{platform_id}:vote") + Observable postVersionVote(@Path("platform_id") String platformId); /** * 根据game_id获取工具箱数据 */ @GET("toolkits?view=digest") - Observable> getGameToolBoxData(@Query("offset") int offset, @Query("filter") String filter); + Observable> getGameToolBoxData(@Query("page") int page, @Query("filter") String filter); /** * 根据关键字获取工具箱信息(搜索) */ @GET("toolkits") - Observable> getToolKitData(@Query("offset") int offset, @Query("keyword") String keyword); + Observable> getToolKitData(@Query("page") int page, @Query("keyword") String keyword); /** * 获取已关注的工具箱数据 */ @GET("users/{user_id}/follows/toolkits") - Observable> getConcernToolKitData(@Path("user_id") String user_id, @Query("offset") int offset, @Query("keyword") String keyword); + Observable> getConcernToolKitData(@Path("user_id") String user_id, @Query("page") int page, @Query("keyword") String keyword); /** * 根据工具箱id获取工具箱详情数据 @@ -374,13 +375,13 @@ public interface ApiService { * 获取收藏的工具 */ @GET("users/{user_id}/favorites/toolkits") - Observable> getCollectionTools(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getCollectionTools(@Path("user_id") String user_id, @Query("page") int page); /** * 获取收藏的文章 */ @GET("users/{user_id}/favorites/articles") - Observable> getCollectionArticle(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getCollectionArticle(@Path("user_id") String user_id, @Query("page") int page); /** * 删除收藏的文章 @@ -517,14 +518,14 @@ public interface ApiService { */ @GET("article/{news_id}/comment?order=hot") Observable> getHotComment(@Path("news_id") String news_id, @Query("limit") int limit, - @Query("offset") int offset); + @Query("page") int page); /** * 获取新闻评论 */ @GET("articles/{article_id}/comments") Observable> getComment(@Path("article_id") String article_id, @Query("limit") int limit, - @Query("offset") int offset); + @Query("page") int page); /** * 发布评论 @@ -539,7 +540,7 @@ public interface ApiService { */ @GET("articles/comments/{comment_id}/traces") Observable> getCommentTrace(@Path("comment_id") String news_id, @Query("limit") int limit, - @Query("offset") int offset); + @Query("page") int page); /********* LibaoService ********/ @@ -547,26 +548,26 @@ public interface ApiService { * 获取礼包列表数据 */ @GET("libao?limit=20") - Observable> getLibao(@Query("offset") int offset); + Observable> getLibao(@Query("page") int page); /** * 搜索礼包列表数据 */ @GET("libao?limit=20") - Observable> getLibaoBySearch(@Query("keyword") String searchKey, @Query("offset") int offset); + Observable> getLibaoBySearch(@Query("filter") String filter, @Query("page") int page); /** * 关注礼包列表数据 */ @GET("users/{user_id}/follows/libao") - Observable> getConcernLibao(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getConcernLibao(@Path("user_id") String user_id, @Query("page") int page); /** * 获取游戏详情礼包数据 */ @GET("libao") Observable> getLibaoByGame(@Query("filter") String filter, - @Query("offset") int offset, @Query("limit") int limit); + @Query("page") int page, @Query("limit") int limit); /** * 获取礼包详情数据 @@ -590,7 +591,7 @@ public interface ApiService { * 获取礼包存号箱数据 */ @GET("users/{user_id}/libao/codes") - Observable> getCunHaoXiang(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getCunHaoXiang(@Path("user_id") String user_id, @Query("page") int page); /** * 领取礼包 @@ -627,7 +628,7 @@ public interface ApiService { * 获取历史礼包数据 */ @GET("libao") - Observable> getHistoryLibao(@Query("history") String history, @Query("offset") int offset); + Observable> getHistoryLibao(@Query("history") String history, @Query("page") int page); /***************8 MessageService *******/ @@ -637,7 +638,7 @@ public interface ApiService { * 获取消息-客服数据 */ @GET("private_messages") - Observable> getMessageKeFuData(@Query("offset") int offset); + Observable> getMessageKeFuData(@Query("page") int page); /** * 获取消息未读数据 @@ -663,7 +664,7 @@ public interface ApiService { * 获取消息-评论数据 */ @GET("messages") - Observable> getMessageData(@Query("offset") int offset); + Observable> getMessageData(@Query("page") int page); // /** // * 提交已读评论消息 @@ -673,7 +674,7 @@ public interface ApiService { // Observable postMarkCommentRead(); @GET("messages") - Observable> getMessage(@Query("view") String type, @Query("offset") int offset); + Observable> getMessage(@Query("view") String type, @Query("page") int page); /****** 问答(社区相关) *******/ @@ -682,7 +683,7 @@ public interface ApiService { * 社区列表 */ @GET("communities") - Observable> getAskGameSelect(@Query("offset") int offset); + Observable> getAskGameSelect(@Query("page") int page); /** * 社区列表 @@ -694,13 +695,13 @@ public interface ApiService { * 获取社区首页精选 */ @GET("communities/{community_id}/choiceness") - Observable> getAskHot(@Path("community_id") String communityId, @Query("offset") int offset); + Observable> getAskHot(@Path("community_id") String communityId, @Query("page") int page); /** * 获取社区首页-问题列表 */ @GET("communities/{community_id}/questions?view=digest") - Observable> getAskQuestions(@Path("community_id") String communityId, @Query("tag_group") String type, @Query("offset") int offset); + Observable> getAskQuestions(@Path("community_id") String communityId, @Query("tag_group") String type, @Query("page") int page); /** * 获取社区首页栏目:默认 @@ -738,20 +739,20 @@ public interface ApiService { * 社区问题的回答列表 */ @GET("questions/{questions_id}/answers?view=digest") - Observable> getQuestionsAnswer(@Path("questions_id") String questionsId, @Query("fold") boolean isFold, @Query("offset") int offset); + Observable> getQuestionsAnswer(@Path("questions_id") String questionsId, @Query("fold") boolean isFold, @Query("page") int page); /** * 获取社区达人列表 */ @GET("questions/{question_id}/experts") - Observable> getInviteExperts(@Path("question_id") String questionsId, @Query("offset") int offset); + Observable> getInviteExperts(@Path("question_id") String questionsId, @Query("page") int page); /** * 搜索社区达人列表 */ @GET("questions/{question_id}/experts:search") Observable> getSearchInviteExperts(@Path("question_id") String questionId, - @Query("filter") String filter, @Query("offset") int offset); + @Query("filter") String filter, @Query("page") int page); /** * 邀请达人回答社区问题 @@ -763,13 +764,13 @@ public interface ApiService { * 搜索社区问题 */ @GET("communities/{community_id}:search") - Observable> getAskSearch(@Path("community_id") String communityId, @Query("filter") String filter, @Query("offset") int offset); + Observable> getAskSearch(@Path("community_id") String communityId, @Query("filter") String filter, @Query("page") int page); /** * 搜索社区问题(编辑问题索引) */ @GET("communities/{community_id}/questions:search?view=digest") - Observable> getAskSearchByTitle(@Path("community_id") String communityId, @Query("filter") String filter, @Query("offset") int offset); + Observable> getAskSearchByTitle(@Path("community_id") String communityId, @Query("filter") String filter, @Query("page") int page); /** * 用户对社区进行投票 @@ -829,25 +830,25 @@ public interface ApiService { * 获取用户的问题列表 */ @GET("users/{user_id}/questions") - Observable> getMyQuestions(@Path("user_id") String userId, @Query("offset") int offset); + Observable> getMyQuestions(@Path("user_id") String userId, @Query("page") int page); /** * 获取用户的回答列表 */ @GET("users/{user_id}/answers") - Observable> getMyAnswers(@Path("user_id") String userId, @Query("offset") int offset); + Observable> getMyAnswers(@Path("user_id") String userId, @Query("page") int page); /** * 获取用户的草稿列表 */ @GET("users/{user_id}/answer_drafts") - Observable> getMyAnswerDrafts(@Path("user_id") String userId, @Query("offset") int offset); + Observable> getMyAnswerDrafts(@Path("user_id") String userId, @Query("page") int page); /** * 获取用户的关注问题列表 */ @GET("users/{user_id}/follows/questions") - Observable> getConcernQuestions(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getConcernQuestions(@Path("user_id") String user_id, @Query("page") int page); /** * 收藏回答 @@ -890,7 +891,7 @@ public interface ApiService { * 获取用户收藏的回答列表 */ @GET("users/{user_id}/favorites/answers") - Observable> getCollestionAnswer(@Path("user_id") String user_id, @Query("offset") int offset); + Observable> getCollectionAnswer(@Path("user_id") String user_id, @Query("page") int page); // /** // * 获取默认社区 @@ -926,11 +927,11 @@ public interface ApiService { * 获取评论列表.可以分页 */ @GET("answers/{answer_id}/comments") - Observable> getAnswerCommentList(@Path("answer_id") String answerId, @Query("limit") int limit, @Query("offset") int offset); + Observable> getAnswerCommentList(@Path("answer_id") String answerId, @Query("limit") int limit, @Query("page") int page); /** * 获取评论的对话列表. */ @GET("answers/{answer_id}/comments/{comment_id}/trace") - Observable> getAnswerCommentConversationList(@Path("answer_id") String answerId, @Path("comment_id") String commentId, @Query("limit") int limit, @Query("offset") int offset); + Observable> getAnswerCommentConversationList(@Path("answer_id") String answerId, @Path("comment_id") String commentId, @Query("limit") int limit, @Query("page") int page); } \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/fragment/VoteFragment.java b/app/src/main/java/com/halo/assistant/fragment/VoteFragment.java index dd8a6abe05..be84faba32 100644 --- a/app/src/main/java/com/halo/assistant/fragment/VoteFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/VoteFragment.java @@ -37,6 +37,7 @@ import okhttp3.MediaType; import okhttp3.RequestBody; import okhttp3.ResponseBody; import retrofit2.HttpException; +import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @@ -46,7 +47,7 @@ import rx.schedulers.Schedulers; public class VoteFragment extends NormalFragment implements SwipeRefreshLayout.OnRefreshListener, VoteAdapter.OnAddVoteListener { - + @BindView(R.id.vote_rv) RecyclerView mVoteRv; @BindView(R.id.vote_refresh) @@ -113,7 +114,7 @@ public class VoteFragment extends NormalFragment implements SwipeRefreshLayout.O super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && mAdapter.isLoaded() && !mAdapter.isRemove() && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) { - mAdapter.getVersionVote(mAdapter.getItemCount() - 1); + mAdapter.getVersionVote(); } } }); @@ -250,8 +251,14 @@ public class VoteFragment extends NormalFragment implements SwipeRefreshLayout.O final RequestBody body = RequestBody.create(MediaType.parse("application/json"), object.toString()); - RetrofitManager.getInstance(getContext()).getApi() - .postVersionVote(body, mGameId) + Observable responseBodyObservable; + + if (isNewVote) { + responseBodyObservable = RetrofitManager.getInstance(getContext()).getApi().addVersionVote(body, mGameId); + } else { + responseBodyObservable = RetrofitManager.getInstance(getContext()).getApi().postVersionVote(name); // name is id + } + responseBodyObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @@ -259,30 +266,21 @@ public class VoteFragment extends NormalFragment implements SwipeRefreshLayout.O public void onResponse(ResponseBody response) { super.onResponse(response); waitDialog.dismiss(); - try { - String string = response.string(); - JSONObject responseObject = new JSONObject(string); - boolean cast = responseObject.getBoolean("cast"); - String id = responseObject.getString("_id"); - if (cast) { + if (isNewVote) { + String string = response.string(); + JSONObject responseObject = new JSONObject(string); + String id = responseObject.getString("_id"); toast(R.string.vote_success); - } else { - if (isNewVote) { - toast("已经存在相同的选项"); - } else { - toast("你已经投过了"); - } - } - if (!TextUtils.isEmpty(id)) { - mAdapter.voteCallBack(cast, isNewVote, id, name); - - if (isNewVote) { + if (!TextUtils.isEmpty(id)) { + mAdapter.voteCallBack(isNewVote, id, name); mVoteRv.scrollToPosition(mAdapter.getItemCount() - 1); - } - } + } + } else { + mAdapter.voteCallBack(isNewVote, name, null); + } } catch (Exception e) { e.printStackTrace(); } @@ -299,6 +297,10 @@ public class VoteFragment extends NormalFragment implements SwipeRefreshLayout.O String detail = errorJson.getString("detail"); if ("illegal".equals(detail)) { toast(R.string.vote_illegal_hint); + } else if ("already has".equals(detail)) { + if (isNewVote) { + toast("已经存在相同的选项"); + } } } catch (Exception e1) { e1.printStackTrace(); diff --git a/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java b/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java index 66760f597d..6f64033ca8 100644 --- a/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java @@ -99,7 +99,7 @@ public class CommentDetailFragment extends NormalFragment implements OnCommentCa public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && !mAdapter.isOver() && !mAdapter.isLoading()) { - mAdapter.loadData(mAdapter.getItemCount()); + mAdapter.loadData(); } } }); diff --git a/app/src/main/java/com/halo/assistant/fragment/game/GameNewsSearchFragment.java b/app/src/main/java/com/halo/assistant/fragment/game/GameNewsSearchFragment.java index 420b019c61..9f71cc756f 100644 --- a/app/src/main/java/com/halo/assistant/fragment/game/GameNewsSearchFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/game/GameNewsSearchFragment.java @@ -126,7 +126,7 @@ public class GameNewsSearchFragment extends NormalFragment { if (mGameNewsAdapter != null && newState == RecyclerView.SCROLL_STATE_IDLE && mLayoutManager.findLastVisibleItemPosition() == mGameNewsAdapter.getItemCount() - 1) { if (!mGameNewsAdapter.isRemove() && !mGameNewsAdapter.isLoading() && !mGameNewsAdapter.isNetworkError()) { - mGameNewsAdapter.addList(mGameNewsAdapter.getNewsList().size()); + mGameNewsAdapter.addList(); } } }