diff --git a/app/src/main/java/com/gh/base/BaseRecyclerViewHolder.java b/app/src/main/java/com/gh/base/BaseRecyclerViewHolder.java index 8a34ee1164..03e442f619 100644 --- a/app/src/main/java/com/gh/base/BaseRecyclerViewHolder.java +++ b/app/src/main/java/com/gh/base/BaseRecyclerViewHolder.java @@ -25,6 +25,7 @@ public abstract class BaseRecyclerViewHolder extends RecyclerView.ViewHolder /** * 具体的设置监听在childViewHolder 设置 + * * @param itemView * @param data 一般情况下只传列表数据 * @param listClickListener 列表事件接口 @@ -35,6 +36,15 @@ public abstract class BaseRecyclerViewHolder extends RecyclerView.ViewHolder this.mListClickListener = listClickListener; } + public BaseRecyclerViewHolder(View itemView, OnListClickListener listClickListener) { + this(itemView); + this.mListClickListener = listClickListener; + } + + public void setClickData(T clickData) { + this.mData = clickData; + } + @Override public void onClick(View view) { try { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java index 46255ef29c..856956b951 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java @@ -21,6 +21,7 @@ import com.gh.gamecenter.ask.entity.MeEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.manager.UserManager; +import java.util.ArrayList; import java.util.List; /** @@ -44,7 +45,8 @@ public class AskSelectGameAdapter extends ListAdapter { @Override protected void setListData(List listData) { - mEntityList.addAll(listData); + if (listData == null) return; + mEntityList = new ArrayList<>(listData); for (int i = 0; i < mEntityList.size(); i++) { AskGameSelectEntity entity = mEntityList.get(i); if (TextUtils.isEmpty(entity.getStatus())) { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/FooterViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/FooterViewHolder.java index faf8e41c94..7712c270c5 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/FooterViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/FooterViewHolder.java @@ -42,6 +42,11 @@ public class FooterViewHolder extends BaseRecyclerViewHolder { itemView.setOnClickListener(this); } + public FooterViewHolder(View itemView, OnListClickListener listClickListener) { + super(itemView, listClickListener); + itemView.setOnClickListener(this); + } + // 减去recyclerView item间隔(个别列表间隔很大) public void initItemPadding() { itemView.setPadding(0, 0, 0, 0); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java index 05ac9665ff..404a1dd446 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java @@ -37,10 +37,10 @@ public class AskQuestionsHotAdapter extends ListAdapter { switch (viewType) { case ItemViewType.ITEM_FOOTER: view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view, null, mListClickListener); + return new FooterViewHolder(view, mListClickListener); case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_questions_hot_item, parent, false); - return new AskQuestionsHotViewHolder(view, mEntityList, mListClickListener); + return new AskQuestionsHotViewHolder(view, mListClickListener); default: return null; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java index 775919812b..78ed546f60 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java @@ -17,15 +17,9 @@ import com.gh.gamecenter.ask.entity.Questions; 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.manager.UserManager; -import com.gh.gamecenter.retrofit.RetrofitManager; - -import java.util.List; import butterknife.BindView; import butterknife.OnClick; -import rx.Observable; import static com.gh.gamecenter.ask.AskFragment.COMMUNITIES_SELECT_REQUEST; @@ -33,7 +27,7 @@ import static com.gh.gamecenter.ask.AskFragment.COMMUNITIES_SELECT_REQUEST; * Created by khy on 2/12/17. */ -public class AskQuestionsHotFragment extends ListFragment { +public class AskQuestionsHotFragment extends ListFragment { @BindView(R.id.reuse_nodata_skip_tv_btn) View mSkipHint; @@ -62,13 +56,6 @@ public class AskQuestionsHotFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getAskHot(UserManager.getInstance().getCommunityId(getContext()), offset); - } - @Override protected ListAdapter provideListAdapter() { return mAdapter == null ? mAdapter = new AskQuestionsHotAdapter(getContext(), this) : mAdapter; @@ -83,7 +70,7 @@ public class AskQuestionsHotFragment extends ListFragment questionsList; + AnswerEntity answerEntity; switch (view.getId()) { case R.id.footerview_item: if (mAdapter.isNetworkError()) { @@ -92,15 +79,15 @@ public class AskQuestionsHotFragment extends ListFragment) data; - Questions questions = questionsList.get(position).getQuestions(); + answerEntity = (AnswerEntity) data; + Questions questions = answerEntity.getQuestions(); startActivity(QuestionsDetailActivity.getIntent(getContext(), questions.getId(), tracers)); AskLogUtils.uploadQuestions(getContext(), tracers, questions); break; case R.id.ask_item_constraintlayout: - questionsList = (List) data; + answerEntity = (AnswerEntity) data; Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ANSWER_ID, questionsList.get(position).getId()); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, answerEntity.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, "(首页精选)"); NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); break; diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewHolder.java index f5a102e015..e034550863 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewHolder.java @@ -20,7 +20,7 @@ import butterknife.BindView; * Created by khy on 4/12/17. */ -public class AskQuestionsHotViewHolder extends BaseRecyclerViewHolder { +public class AskQuestionsHotViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.ask_item_usericon) @@ -36,13 +36,14 @@ public class AskQuestionsHotViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.ask_item_votecount) TextView mAskVotecount; - public AskQuestionsHotViewHolder(View itemView, Object data, OnListClickListener listClickListener) { - super(itemView, data, listClickListener); + public AskQuestionsHotViewHolder(View itemView,OnListClickListener listClickListener) { + super(itemView, listClickListener); itemView.setOnClickListener(this); mAskTitle.setOnClickListener(this); } public void initQuestionsHotViewHolder(AnswerEntity entity) { + setClickData(entity); mAskVotecount.setText(itemView.getContext().getString(R.string.ask_vote_count, AskUtils.voteCountFormat(entity.getVote()))); mAskContent.setText(entity.getBrief()); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java new file mode 100644 index 0000000000..d59b7f663c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotViewModel.java @@ -0,0 +1,30 @@ +package com.gh.gamecenter.ask; + +import android.app.Application; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/03/18. + */ + +public class AskQuestionsHotViewModel extends ListViewModel { + + public AskQuestionsHotViewModel(@NonNull Application application) { + super(application); + mResultLiveData.addSource(mListLiveData, mResultLiveData::postValue); + } + + @Override + public Observable> provideDataObservable(int offset) { + return RetrofitManager.getInstance(getApplication()).getApi().getAskHot(UserManager.getInstance().getCommunityId(getApplication()), offset); + } +} 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 f0bace46f7..e5a9b66aa3 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyFragment.java @@ -14,8 +14,8 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.ask.entity.Questions; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.baselist.ListViewModel; import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -30,7 +30,7 @@ import rx.Observable; * Created by khy on 5/12/17. */ -public class AskQuestionsNewBodyFragment extends ListFragment { +public class AskQuestionsNewBodyFragment extends ListFragment { private AskQuestionsNewBodyAdapter mAdapter; private CheckLoginUtils.OnLoggenInListener mOnLoggenInListener; @@ -79,7 +79,6 @@ public class AskQuestionsNewBodyFragment extends ListFragment> provideDataObservable(int offset) { return RetrofitManager.getInstance(getContext()).getApi().getAskQuestions(mCommunityId, mType, offset); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java index 7a142d0d29..81784d7ed3 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java @@ -87,7 +87,7 @@ public class AskQuestionsNewFragment extends BaseFragment { public void onChanged(@Nullable List tagGroups) { mTagGroupsList = tagGroups; if (tagGroups != null && tagGroups.size() > 0) { -// initTab(); + initTab(); mViewpager.setVisibility(View.VISIBLE); mAppBar.setVisibility(View.VISIBLE); mNoConn.setVisibility(View.GONE); diff --git a/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java b/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java index f1385df25a..636c53d99a 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java @@ -54,7 +54,7 @@ import rx.schedulers.Schedulers; * Created by khy on 11/12/17. */ -public class SelectGameFragment extends ListFragment { +public class SelectGameFragment extends ListFragment { @BindView(R.id.ask_selectgame_rv_title) TextView mRvTitle; diff --git a/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java new file mode 100644 index 0000000000..ab4739a1fc --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/SelectGameViewModel.java @@ -0,0 +1,29 @@ +package com.gh.gamecenter.ask; + +import android.app.Application; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.ask.entity.AskGameSelectEntity; +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/03/18. + */ + +public class SelectGameViewModel extends ListViewModel { + + public SelectGameViewModel(@NonNull Application application) { + super(application); + mResultLiveData.addSource(mListLiveData, mResultLiveData::postValue); + } + + @Override + public Observable> provideDataObservable(int offset) { + return RetrofitManager.getInstance(getApplication()).getApi().getAskGameSelect(offset); + } +} 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 8b301e3f2b..674ae97200 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 @@ -11,6 +11,7 @@ import com.gh.gamecenter.ask.entity.Questions; 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.retrofit.RetrofitManager; import java.util.List; @@ -21,7 +22,7 @@ import rx.Observable; * Created by khy on 20/12/17. */ -public class ConcernQuestionsFragment extends ListFragment { +public class ConcernQuestionsFragment extends ListFragment { private ConcernQuestionsAdapter mAdapter; 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 219612e086..a8db759b19 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 @@ -14,6 +14,7 @@ import com.gh.gamecenter.ask.entity.Questions; 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.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -25,7 +26,7 @@ import rx.Observable; * Created by khy on 20/12/17. */ -public class MyAnswerFragment extends ListFragment { +public class MyAnswerFragment extends ListFragment { private MyAnswerAdapter mAdapter; 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 4e9eefb1a6..d248e75712 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 @@ -16,6 +16,7 @@ import com.gh.gamecenter.ask.questionsdetail.AnswerEditFragment; 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.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -27,7 +28,7 @@ import rx.Observable; * Created by khy on 20/12/17. */ -public class MyDraftFragment extends ListFragment { +public class MyDraftFragment extends ListFragment { private static final int ANSWER_DRAFT_REQUEST = 101; 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 8a7bf9f1b2..e83843ba72 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 @@ -11,6 +11,7 @@ import com.gh.gamecenter.ask.entity.Questions; 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.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -22,7 +23,7 @@ import rx.Observable; * Created by khy on 20/12/17. */ -public class MyQuestionsFragment extends ListFragment { +public class MyQuestionsFragment extends ListFragment { private MyQuestionsAdapter mAdapter; 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 7305a03d80..7a7b9e4121 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 @@ -1,7 +1,6 @@ package com.gh.gamecenter.ask.questionsdetail; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.View; @@ -16,6 +15,7 @@ import com.gh.gamecenter.ask.entity.AnswerEntity; 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.retrofit.RetrofitManager; import java.util.List; @@ -27,7 +27,7 @@ import rx.Observable; * Created by khy on 11/12/17. */ -public class AnswerFoldFragment extends ListFragment { +public class AnswerFoldFragment extends ListFragment { @BindView(R.id.ask_fold_hint) View mFlodHint; @@ -66,7 +66,6 @@ public class AnswerFoldFragment extends ListFragment { return new VerticalItemDecoration(getContext(), 8, false); } - @NonNull @Override public Observable> provideDataObservable(int offset) { return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, true, offset); diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java index 635f056f30..65b466a716 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java @@ -31,6 +31,7 @@ import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.LoadStatus; import com.google.android.flexbox.FlexboxLayout; +import java.util.ArrayList; import java.util.List; /** @@ -61,15 +62,19 @@ public class QuestionsDetailAdapter extends ListAdapter { @Override protected void setListData(List listData) { + // todo 分页动画有问题 if (listData != null && listData.size() != 0 && mQuestionsDetailEntity != null) { - mEntityList.addAll(listData); - notifyItemRangeInserted(mEntityList.size() - listData.size() + TOP_ITEM_COUNT, listData.size()); +// int oldDataSize = mEntityList == null ? 0 : mEntityList.size(); + mEntityList = new ArrayList<>(listData); + notifyDataSetChanged(); +// notifyItemRangeInserted(oldDataSize + TOP_ITEM_COUNT, listData.size() - oldDataSize); } } @Override public void loadChange(LoadStatus status) { switch (status) { + case INIT_OVER: case LIST_OVER: mIsOver = true; break; 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 76579d66d0..8eae78e5bc 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 @@ -30,6 +30,7 @@ import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadStatus; import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.utils.Utils; @@ -52,7 +53,7 @@ import rx.schedulers.Schedulers; * Created by khy on 7/12/17. */ -public class QuestionsDetailFragment extends ListFragment { +public class QuestionsDetailFragment extends ListFragment { @BindView(R.id.questionsdetail_answer) RelativeLayout mAnswer; 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 new file mode 100644 index 0000000000..6d3baee37e --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailViewModel.java @@ -0,0 +1,28 @@ +package com.gh.gamecenter.ask.questionsdetail; + +import android.app.Application; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/03/18. + */ + +public class QuestionsDetailViewModel extends ListViewModel { + + public QuestionsDetailViewModel(@NonNull Application application) { + super(application); + } + + @Override + public Observable> provideDataObservable(int offset) { + return RetrofitManager.getInstance(getApplication()).getApi().getQuestionsAnswer("", false, offset); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java index 1b802d8035..f828272b97 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java @@ -14,6 +14,7 @@ import com.gh.gamecenter.ask.entity.MeEntity; import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -35,7 +36,7 @@ import rx.schedulers.Schedulers; * Created by khy on 7/12/17. */ -public class QuestionsInviteFragment extends ListFragment { +public class QuestionsInviteFragment extends ListFragment { private QuestionsDetailEntity mQuestionsDetailEntity; 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 bf98b279c8..11c74f05bf 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 @@ -22,6 +22,7 @@ import com.gh.gamecenter.ask.entity.Questions; 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.manager.UserManager; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -35,7 +36,7 @@ import rx.Observable; * Created by khy on 8/12/17. */ -public class AskSearchFragment extends ListFragment { +public class AskSearchFragment extends ListFragment { @BindView(R.id.list_ask_hint) View mSearchHint; diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListAdapter.java b/app/src/main/java/com/gh/gamecenter/baselist/ListAdapter.java index 9ad8cff923..0444ee2c4f 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListAdapter.java @@ -95,19 +95,22 @@ public abstract class ListAdapter extends BaseRecyclerAdapter { public void loadChange(LoadStatus status) { switch (status) { + case INIT_OVER: case LIST_OVER: mIsOver = true; + mIsNetworkError = false; break; case LIST_FAILED: + mIsOver = false; mIsNetworkError = true; break; + case INIT: case LIST_LOADED: - mIsNetworkError = false; - break; case LIST_LOADING: + if (!mIsNetworkError && !mIsOver) return; mIsNetworkError = false; mIsOver = false; - return; + break; case REFRESH: mEntityList.clear(); notifyDataSetChanged(); 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 0132a3ac24..f122ea1c94 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java @@ -15,6 +15,7 @@ import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.normal.NormalFragment; +import com.halo.assistant.HaloApp; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -53,6 +54,16 @@ public abstract class ListFragment viewModelClass = getViewModelClass(); + if (!NormalListViewModel.class.getName().equals(viewModelClass.getName())) { + return ViewModelProviders.of(this).get(viewModelClass); + } else { + NormalListViewModel.Factory factory = new NormalListViewModel.Factory(HaloApp.getInstance().getApplication(), this); + return ViewModelProviders.of(this, factory).get(viewModelClass); + } + } + @Override protected int getLayoutId() { return R.layout.fragment_list_base; @@ -61,6 +72,7 @@ public abstract class ListFragment viewModelClass = getViewModelClass(); - mListViewModel = ViewModelProviders.of(this).get(viewModelClass); + mListViewModel = provideListViewModel(); mListViewModel.getObsListData().observe(this, this); mListViewModel.getLoadStatusLiveData().observe(this, o -> { if (o instanceof LoadStatus) { @@ -81,10 +92,12 @@ public abstract class ListFragment { LoadStatus curStatus = mLoadStatusLiveData.getValue(); if (listObservable == null || curStatus != null && - curStatus != LoadStatus.INIT_LOADED && - curStatus != LoadStatus.LIST_LOADED && - curStatus != LoadStatus.INIT) return; + curStatus != LoadStatus.INIT_LOADED && + curStatus != LoadStatus.LIST_LOADED && + curStatus != LoadStatus.INIT) return; if (mCurLoadParams.getLoadOffset() == 0) { mLoadStatusLiveData.postValue(LoadStatus.INIT_LOADING); diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java b/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java index 7d735dad35..64fc1ce45e 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java @@ -26,6 +26,12 @@ public abstract class ListViewModel extends An mListLiveData = mRepository.getResultLiveData(); } + public ListViewModel(@NonNull Application application, ListRepository repository) { + super(application); + mRepository = repository; + mListLiveData = mRepository.getResultLiveData(); + } + public LiveData> getObsListData() { return mResultLiveData; } diff --git a/app/src/main/java/com/gh/gamecenter/baselist/NormalListViewModel.java b/app/src/main/java/com/gh/gamecenter/baselist/NormalListViewModel.java index b72f877ffe..0eb481fd3f 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/NormalListViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/NormalListViewModel.java @@ -1,29 +1,48 @@ package com.gh.gamecenter.baselist; import android.app.Application; +import android.arch.lifecycle.ViewModel; +import android.arch.lifecycle.ViewModelProvider; import android.support.annotation.NonNull; -import com.gh.gamecenter.ask.entity.AnswerEntity; -import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.retrofit.RetrofitManager; - import java.util.List; import rx.Observable; /** - * Created by khy on 20/03/18. + * Created by khy on 21/03/18. */ -public class NormalListViewModel extends ListViewModel { +public class NormalListViewModel extends ListViewModel { - public NormalListViewModel(@NonNull Application application) { - super(application); + + public NormalListViewModel(@NonNull Application application, ListRepository repository) { + super(application, repository); mResultLiveData.addSource(mListLiveData, mResultLiveData::postValue); } + + @Deprecated @Override - public Observable> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getApplication()).getApi().getAskHot(UserManager.getInstance().getCommunityId(getApplication()), offset); + public Observable> provideDataObservable(int offset) { + return null; + } + + public static class Factory extends ViewModelProvider.NewInstanceFactory { + @NonNull + private final Application mApplication; + + private final ListRepository mRepository; + + public Factory(@NonNull Application application, OnDataObservable onDataObservable) { + mApplication = application; + mRepository = new ListRepository(onDataObservable); + } + + @Override + public T create(Class modelClass) { + //noinspection unchecked + return (T) new NormalListViewModel(mApplication, mRepository); + } } } 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 98c73ad327..b4d4a049d4 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java @@ -14,6 +14,7 @@ import com.gh.gamecenter.ask.entity.Questions; 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.retrofit.RetrofitManager; import java.util.List; @@ -24,7 +25,7 @@ import rx.Observable; * Created by khy on 22/12/17. */ -public class AnswerFragment extends ListFragment { +public class AnswerFragment extends ListFragment { private AnswerAdapter mAdapter; 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 941acbbc48..b88779804b 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java @@ -16,8 +16,8 @@ import com.gh.gamecenter.ask.AnswerDetailFragment; import com.gh.gamecenter.ask.entity.Questions; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; -import com.gh.gamecenter.baselist.ListViewModel; import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.entity.MessageEntity; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -30,7 +30,7 @@ import rx.Observable; * 消息-评论 */ -public class MessageFragment extends ListFragment { +public class MessageFragment extends ListFragment { MessageFragmentAdapter mAdapter;