|
@@ -1,309 +0,0 @@
|
|
|
-package com.sheep.gamegroup.view.fragment;
|
|
|
|
|
-
|
|
|
|
|
-import android.app.Activity;
|
|
|
|
|
-import android.support.v4.widget.SwipeRefreshLayout;
|
|
|
|
|
-import android.support.v7.widget.LinearLayoutManager;
|
|
|
|
|
-import android.support.v7.widget.RecyclerView;
|
|
|
|
|
-import android.view.View;
|
|
|
|
|
-
|
|
|
|
|
-import com.chad.library.adapter.base.BaseQuickAdapter;
|
|
|
|
|
-import com.chad.library.adapter.base.BaseViewHolder;
|
|
|
|
|
-import com.sheep.gamegroup.absBase.AbsObserver;
|
|
|
|
|
-import com.sheep.gamegroup.absBase.ILoadMore;
|
|
|
|
|
-import com.sheep.gamegroup.absBase.IRefresh;
|
|
|
|
|
-import com.sheep.gamegroup.model.api.ApiService;
|
|
|
|
|
-import com.sheep.gamegroup.model.entity.BaseMessage;
|
|
|
|
|
-import com.sheep.gamegroup.model.util.SheepSubscriber;
|
|
|
|
|
-import com.sheep.gamegroup.util.DataUtil;
|
|
|
|
|
-import com.sheep.gamegroup.util.ListUtil;
|
|
|
|
|
-import com.sheep.gamegroup.util.SysAppUtil;
|
|
|
|
|
-import com.sheep.gamegroup.util.ViewUtil;
|
|
|
|
|
-import com.sheep.jiuyan.samllsheep.R;
|
|
|
|
|
-import com.sheep.jiuyan.samllsheep.SheepApp;
|
|
|
|
|
-import com.sheep.jiuyan.samllsheep.base.BaseFragment;
|
|
|
|
|
-
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-
|
|
|
|
|
-import butterknife.BindView;
|
|
|
|
|
-import io.reactivex.Observable;
|
|
|
|
|
-import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
|
|
|
-import io.reactivex.schedulers.Schedulers;
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * Created by realicing on 2018/11/28.
|
|
|
|
|
- * realicing@sina.com
|
|
|
|
|
- * 可设置每次请求多个接口
|
|
|
|
|
- * android.support.v4.widget.SwipeRefreshLayout与RecyclerView来实现上拉刷新与下拉加载更多,子类提供网络接口相关
|
|
|
|
|
- */
|
|
|
|
|
-public abstract class BaseListFragment5x<I, T, T2> extends BaseFragment implements IRefresh, ILoadMore {
|
|
|
|
|
- @Override
|
|
|
|
|
- public int getLayoutId() {
|
|
|
|
|
- return R.layout.common_title_net_srl_rv;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected Activity activity;
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onViewCreated() {
|
|
|
|
|
- activity = getActivity();
|
|
|
|
|
- initView();
|
|
|
|
|
- initListener();
|
|
|
|
|
- switch (refreshDataType()) {
|
|
|
|
|
- case REFRESH_ON_CREATE:
|
|
|
|
|
- refreshData();
|
|
|
|
|
- break;
|
|
|
|
|
- case REFRESH_ON_RESUME:
|
|
|
|
|
- break;
|
|
|
|
|
- case REFRESH_ON_YOURSELF:
|
|
|
|
|
- default:
|
|
|
|
|
- notifyDataSetChanged(0);
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public static final int REFRESH_ON_CREATE = 0;
|
|
|
|
|
- public static final int REFRESH_ON_RESUME = 1;
|
|
|
|
|
- public static final int REFRESH_ON_YOURSELF = -1;
|
|
|
|
|
- @BindView(R.id.title)
|
|
|
|
|
- View title;
|
|
|
|
|
- @BindView(R.id.check_net_ll)
|
|
|
|
|
- View check_net_ll;
|
|
|
|
|
- @BindView(R.id.swipeRefreshLayout)
|
|
|
|
|
- SwipeRefreshLayout swipeRefreshLayout;
|
|
|
|
|
- @BindView(R.id.recyclerView)
|
|
|
|
|
- RecyclerView recyclerView;
|
|
|
|
|
-
|
|
|
|
|
- protected BaseQuickAdapter<I, BaseViewHolder> baseQuickAdapter;
|
|
|
|
|
-
|
|
|
|
|
- protected BaseMessage lastMessage;//最后一个网络获取的结果
|
|
|
|
|
- protected BaseMessage lastMessage2;//最后一个网络获取的结果
|
|
|
|
|
- protected int page = 1;//页数
|
|
|
|
|
- protected int per_page = DataUtil.PER_PAGE;
|
|
|
|
|
- private boolean loadMore;
|
|
|
|
|
-
|
|
|
|
|
- public void initView() {
|
|
|
|
|
- ViewUtil.setVisibility(title, false);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void initListener() {
|
|
|
|
|
- if (swipeRefreshLayout != null) {
|
|
|
|
|
- swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onRefresh() {
|
|
|
|
|
- refreshData();
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- recyclerView.setLayoutManager(getLayoutManager());
|
|
|
|
|
- baseQuickAdapter = getAdapter();
|
|
|
|
|
- baseQuickAdapter.bindToRecyclerView(recyclerView);
|
|
|
|
|
- initLoadMoreListener();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected void initLoadMoreListener() {
|
|
|
|
|
- baseQuickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onLoadMoreRequested() {
|
|
|
|
|
- loadMoreData();
|
|
|
|
|
- }
|
|
|
|
|
- }, recyclerView);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected RecyclerView.LayoutManager getLayoutManager() {
|
|
|
|
|
- return new LinearLayoutManager(SheepApp.getInstance());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void loadMoreData() {
|
|
|
|
|
- if (!loadMore) {
|
|
|
|
|
- loadMore = true;
|
|
|
|
|
- if (ListUtil.size(list) >= per_page * page) {
|
|
|
|
|
- page += 1;
|
|
|
|
|
- initData();
|
|
|
|
|
- } else {
|
|
|
|
|
- setNoMore(true);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- finishRefresh();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected void setNoMore(boolean noMore) {
|
|
|
|
|
- if (noMore) {
|
|
|
|
|
- baseQuickAdapter.loadMoreEnd(isLoadMoreGoneWhenNoMore());
|
|
|
|
|
- }
|
|
|
|
|
- finishRefresh();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected boolean isLoadMoreGoneWhenNoMore() {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected List<T> list = ListUtil.emptyList();
|
|
|
|
|
- protected List<T> lastCacheList = ListUtil.emptyList();
|
|
|
|
|
- protected List<T2> list2 = ListUtil.emptyList();
|
|
|
|
|
- protected List<T2> lastCacheList2 = ListUtil.emptyList();
|
|
|
|
|
-
|
|
|
|
|
- //默认先获取缓存
|
|
|
|
|
- protected boolean isFirstGetACache() {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void initData() {
|
|
|
|
|
- final String urlKey = getKey(page, per_page);
|
|
|
|
|
- if (isFirstGetACache()) {
|
|
|
|
|
- //先尝试获取缓存数据
|
|
|
|
|
- lastCacheList = DataUtil.getInstance().getCacheList(urlKey, getTClass());
|
|
|
|
|
- loadList(lastCacheList);
|
|
|
|
|
- }
|
|
|
|
|
- final String urlKey2 = getKey2(page, per_page);
|
|
|
|
|
- if (isFirstGetACache()) {
|
|
|
|
|
- //先尝试获取缓存数据
|
|
|
|
|
- lastCacheList2 = DataUtil.getInstance().getCacheList(urlKey2, getT2Class());
|
|
|
|
|
- loadList2(lastCacheList2);
|
|
|
|
|
- }
|
|
|
|
|
- if (check_net_ll != null) {
|
|
|
|
|
- SysAppUtil.checkNet(new AbsObserver<Integer>() {
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onNext(Integer result) {
|
|
|
|
|
- ViewUtil.setVisibility(check_net_ll, result != 0);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- getApi(SheepApp.getInstance().getNetComponent().getApiService())
|
|
|
|
|
- .subscribeOn(Schedulers.io())
|
|
|
|
|
- .observeOn(AndroidSchedulers.mainThread())
|
|
|
|
|
- .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onNext(BaseMessage baseMessage) {
|
|
|
|
|
- lastMessage = baseMessage;
|
|
|
|
|
- boolean isNewData = DataUtil.getInstance().isNewData(urlKey);
|
|
|
|
|
- if (isNewData || !isFirstGetACache()) {
|
|
|
|
|
- if (isFirstGetACache())
|
|
|
|
|
- ListUtil.removeAll(list, lastCacheList);
|
|
|
|
|
- List<T> newList = baseMessage.getDatas(getTClass());
|
|
|
|
|
- loadList(newList);
|
|
|
|
|
- } else {
|
|
|
|
|
- notifyDataSetChanged(1);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onError(BaseMessage baseMessage) {
|
|
|
|
|
- notifyDataSetChanged(1);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- getApi2(SheepApp.getInstance().getNetComponent().getApiService())
|
|
|
|
|
- .subscribeOn(Schedulers.io())
|
|
|
|
|
- .observeOn(AndroidSchedulers.mainThread())
|
|
|
|
|
- .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onNext(BaseMessage baseMessage) {
|
|
|
|
|
- lastMessage2 = baseMessage;
|
|
|
|
|
- boolean isNewData = DataUtil.getInstance().isNewData(urlKey2);
|
|
|
|
|
- if (isNewData || !isFirstGetACache()) {
|
|
|
|
|
- if (isFirstGetACache())
|
|
|
|
|
- ListUtil.removeAll(list2, lastCacheList2);
|
|
|
|
|
- List<T2> newList = baseMessage.getDatas(getT2Class());
|
|
|
|
|
- loadList2(newList);
|
|
|
|
|
- } else {
|
|
|
|
|
- notifyDataSetChanged(2);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onError(BaseMessage baseMessage) {
|
|
|
|
|
- notifyDataSetChanged(2);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onResume() {
|
|
|
|
|
- super.onResume();
|
|
|
|
|
- if (refreshDataType() == REFRESH_ON_RESUME) {
|
|
|
|
|
- refreshData();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 在哪里初始化数据:0 onViewCreated后, 1 onResume后, -1 不初始化
|
|
|
|
|
- *
|
|
|
|
|
- * @return
|
|
|
|
|
- */
|
|
|
|
|
- public int refreshDataType() {
|
|
|
|
|
- return REFRESH_ON_CREATE;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void clear() {
|
|
|
|
|
- lastMessage = null;
|
|
|
|
|
- lastMessage2 = null;
|
|
|
|
|
- setNoMore(false);
|
|
|
|
|
- list.clear();
|
|
|
|
|
- list2.clear();
|
|
|
|
|
- page = 1;
|
|
|
|
|
- initLoadMoreListener();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void refreshData() {
|
|
|
|
|
- clear();
|
|
|
|
|
- ViewUtil.notifyDataSetChanged(recyclerView);
|
|
|
|
|
- initData();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected List<T> newList;
|
|
|
|
|
-
|
|
|
|
|
- protected void loadList(List<T> addList) {
|
|
|
|
|
- ListUtil.addAllItem(list, addList);
|
|
|
|
|
- newList = addList;
|
|
|
|
|
- notifyDataSetChanged(1);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected List<T2> newList2;
|
|
|
|
|
-
|
|
|
|
|
- protected void loadList2(List<T2> addList) {
|
|
|
|
|
- ListUtil.addAllItem(list2, addList);
|
|
|
|
|
- newList2 = addList;
|
|
|
|
|
- notifyDataSetChanged(2);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void notifyDataSetChanged(int x) {
|
|
|
|
|
- if (recyclerView == null)
|
|
|
|
|
- recyclerView = findViewById(R.id.recyclerView);
|
|
|
|
|
- loadMore = false;
|
|
|
|
|
- updateEmptyView();
|
|
|
|
|
- ViewUtil.notifyDataSetChanged(recyclerView);
|
|
|
|
|
- finishRefresh();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected void finishRefresh() {
|
|
|
|
|
- if (swipeRefreshLayout != null)
|
|
|
|
|
- swipeRefreshLayout.setRefreshing(false);
|
|
|
|
|
- baseQuickAdapter.loadMoreComplete();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected void updateEmptyView() {
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void onDestroyView() {
|
|
|
|
|
- super.onDestroyView();
|
|
|
|
|
- if (recyclerView != null) {
|
|
|
|
|
- recyclerView = null;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected abstract BaseQuickAdapter<I, BaseViewHolder> getAdapter();
|
|
|
|
|
-
|
|
|
|
|
- protected abstract String getKey(int page, int per_page);
|
|
|
|
|
-
|
|
|
|
|
- protected abstract String getKey2(int page, int per_page);
|
|
|
|
|
-
|
|
|
|
|
- protected abstract Observable<BaseMessage> getApi(ApiService apiService);
|
|
|
|
|
-
|
|
|
|
|
- protected abstract Observable<BaseMessage> getApi2(ApiService apiService);
|
|
|
|
|
-
|
|
|
|
|
- protected abstract Class<T> getTClass();
|
|
|
|
|
-
|
|
|
|
|
- protected abstract Class<T2> getT2Class();
|
|
|
|
|
-}
|
|
|