hanjing лет назад: 7
Родитель
Сommit
ecf4abc020

+ 0 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActMain.java

@@ -35,7 +35,6 @@ import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.TestUtil;
 import com.sheep.gamegroup.util.UMConfigUtils;
 import com.sheep.gamegroup.view.dialog.DialogGameOrTaskOrGift;
-import com.sheep.gamegroup.view.fragment.FgtFind;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;

+ 111 - 72
app/src/main/java/com/sheep/gamegroup/view/fragment/BaseListFragment5.java

@@ -1,19 +1,20 @@
 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.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 
-import com.chad.library.adapter.base.BaseQuickAdapter;
-import com.chad.library.adapter.base.BaseViewHolder;
+import com.jcodecraeer.xrecyclerview.XRecyclerView;
 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.CommonUtil;
 import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.ListUtil;
 import com.sheep.gamegroup.util.SysAppUtil;
@@ -28,17 +29,17 @@ import butterknife.BindView;
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
+import rx.functions.Action1;
 
 /**
- * Created by realicing on 2018/11/28.
+ * Created by realicing on 2018/9/3.
  * realicing@sina.com
- * 可设置每次请求多个接口
- * android.support.v4.widget.SwipeRefreshLayout与RecyclerView来实现上拉刷新与下拉加载更多,子类提供网络接口相关
+ * 自己可以进行刷新与加载更多,使用com.jcodecraeer.xrecyclerview.XRecyclerView来实现,子类提供网络接口相关
  */
 public abstract class BaseListFragment5<T> extends BaseFragment implements IRefresh, ILoadMore {
     @Override
     public int getLayoutId() {
-        return R.layout.common_title_net_srl_rv;
+        return R.layout.net_empty_xrecycler;
     }
 
     protected Activity activity;
@@ -50,7 +51,7 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
         initListener();
         switch (refreshDataType()) {
             case REFRESH_ON_CREATE:
-                refreshData();
+//                ViewUtil.refreshXrv(view_list);
                 break;
             case REFRESH_ON_RESUME:
                 break;
@@ -64,16 +65,12 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
     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.empty_view)
+    protected View empty_view;
     @BindView(R.id.check_net_ll)
-    View check_net_ll;
-    @BindView(R.id.swipeRefreshLayout)
-    SwipeRefreshLayout swipeRefreshLayout;
-    @BindView(R.id.recyclerView)
-    RecyclerView recyclerView;
-
-    protected BaseQuickAdapter<T, BaseViewHolder> baseQuickAdapter;
+    protected View check_net_ll;
+    @BindView(R.id.view_list)
+    protected XRecyclerView view_list;
 
     protected BaseMessage lastMessage;//最后一个网络获取的结果
     protected int page = 1;//页数
@@ -81,31 +78,27 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
     private boolean loadMore;
 
     public void initView() {
-        ViewUtil.setVisibility(title, false);
+
     }
 
+    protected View bottomLine;
+
     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();
-    }
+        view_list.setLoadingListener(new XRecyclerView.LoadingListener() {
+            @Override
+            public void onRefresh() {
+                refreshData();
+            }
 
-    protected void initLoadMoreListener() {
-        baseQuickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
             @Override
-            public void onLoadMoreRequested() {
+            public void onLoadMore() {
                 loadMoreData();
+
             }
-        }, recyclerView);
+        });
+        bottomLine = ViewUtil.setBottomLine(view_list, getNoMoreCallBack());
+        view_list.setLayoutManager(getLayoutManager());
+        view_list.setAdapter(getAdapter());
     }
 
     protected RecyclerView.LayoutManager getLayoutManager() {
@@ -119,50 +112,54 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
                 page += 1;
                 initData();
             } else {
-                setNoMore(false);
+                view_list.setNoMore(true);
+                setNoMore(true);
             }
         } else {
-            finishRefresh();
+            view_list.loadMoreComplete();
         }
     }
+
     //还有数据没有获取
     protected boolean hasMore() {
-        if(lastMessage != null && lastMessage.getTotal() > 0){
+        if (lastMessage != null && lastMessage.getTotal() > 0) {
             return lastMessage.getTotal() > ListUtil.size(list);
         }
         return ListUtil.size(list) >= per_page * page;
     }
 
-    protected void setNoMore(boolean noMore) {
-        if (noMore) {
-            baseQuickAdapter.loadMoreEnd(isLoadMoreGoneWhenNoMore());
-        }
-        finishRefresh();
-    }
 
-    protected boolean isLoadMoreGoneWhenNoMore() {
-        return false;
+    public void setNoMore(boolean noMore) {
+        this.noMore = noMore;
     }
 
     protected List<T> list = ListUtil.emptyList();
     protected List<T> lastCacheList = ListUtil.emptyList();
 
+    //默认先获取缓存
+    protected boolean isFirstGetACache() {
+        return true;
+    }
+
     public void initData() {
         final String urlKey = getKey(page, per_page);
-        final boolean isFirstGetACache = urlKey != null;
-        if (isFirstGetACache) {
+        if (isFirstGetACache()) {
             //先尝试获取缓存数据
             lastCacheList = DataUtil.getInstance().getCacheList(urlKey, getTClass());
             loadList(lastCacheList);
         }
-        if (check_net_ll != null) {
-            SysAppUtil.checkNet(new AbsObserver<Integer>() {
-                @Override
-                public void onNext(Integer result) {
-                    ViewUtil.setVisibility(check_net_ll, result != 0);
+        SysAppUtil.checkNet(new AbsObserver<Integer>() {
+            @Override
+            public void onNext(Integer result) {
+                if (result != 0) {//无网络
+                    if (check_net_ll != null)
+                        check_net_ll.setVisibility(View.VISIBLE);
+                } else {
+                    if (check_net_ll != null)
+                        check_net_ll.setVisibility(View.GONE);
                 }
-            });
-        }
+            }
+        });
         getApi(SheepApp.getInstance().getNetComponent().getApiService())
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
@@ -171,8 +168,8 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
                     public void onNext(BaseMessage baseMessage) {
                         lastMessage = baseMessage;
                         boolean isNewData = DataUtil.getInstance().isNewData(urlKey);
-                        if (isNewData || !isFirstGetACache) {
-                            if (isFirstGetACache)
+                        if (isNewData || !isFirstGetACache()) {
+                            if (isFirstGetACache())
                                 ListUtil.removeAll(list, lastCacheList);
                             List<T> newList = baseMessage.getDatas(getTClass());
                             loadList(newList);
@@ -188,11 +185,24 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
                 });
     }
 
+    public Action1<String> getNoMoreCallBack() {
+        return null;
+    }
+
+
     @Override
     public void onResume() {
         super.onResume();
         if (refreshDataType() == REFRESH_ON_RESUME) {
-            refreshData();
+//            ViewUtil.refreshXrv(view_list);
+        }
+    }
+
+    @Override
+    public void initDataOnVisibleToUser() {
+        Log.e("BaseListFragment5", this.getTag());
+        if (list.isEmpty()) {
+            ViewUtil.refreshXrv(view_list);
         }
     }
 
@@ -207,15 +217,15 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
 
     public void clear() {
         lastMessage = null;
-        setNoMore(true);
+        setNoMore(false);
+        empty_view.setVisibility(View.INVISIBLE);
         list.clear();
         page = 1;
-        initLoadMoreListener();
     }
 
     public void refreshData() {
         clear();
-        ViewUtil.notifyDataSetChanged(recyclerView);
+        view_list.getAdapter().notifyDataSetChanged();
         initData();
     }
 
@@ -228,28 +238,44 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
     }
 
     public void notifyDataSetChanged() {
-        if (recyclerView == null)
-            recyclerView = findViewById(R.id.recyclerView);
+        if (view_list == null)
+            view_list = findViewById(R.id.view_list);
+        if (empty_view == null)
+            empty_view = findViewById(R.id.empty_view);
         loadMore = false;
-        ViewUtil.notifyDataSetChanged(recyclerView);
-        finishRefresh();
+        updateEmptyView();
+        if (page == 1) {
+            view_list.refreshComplete();
+        } else {
+            view_list.loadMoreComplete();
+        }
+        view_list.getAdapter().notifyDataSetChanged();
+        notifyData();
+        view_list.getFootView().setVisibility(view_list.getAdapter().getItemCount() == 0 ? View.GONE : View.VISIBLE);
     }
 
-    protected void finishRefresh() {
-        if (swipeRefreshLayout != null)
-            swipeRefreshLayout.setRefreshing(false);
-        baseQuickAdapter.loadMoreComplete();
+    protected void updateEmptyView() {
+        CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
     }
 
     @Override
     public void onDestroyView() {
         super.onDestroyView();
-        if (recyclerView != null) {
-            recyclerView = null;
+        // any time,when you finish your activity or fragment,call this below
+        if (view_list != null) {
+            view_list.destroy(); // this will totally release XR's memory
+            view_list = null;
         }
     }
 
-    protected abstract BaseQuickAdapter<T, BaseViewHolder> getAdapter();
+
+    private boolean noMore = false;
+
+    public boolean isNoMore() {
+        return noMore;
+    }
+
+    protected abstract RecyclerView.Adapter getAdapter();
 
     protected abstract String getKey(int page, int per_page);
 
@@ -257,4 +283,17 @@ public abstract class BaseListFragment5<T> extends BaseFragment implements IRefr
 
     protected abstract Class<T> getTClass();
 
+    //刷新数据的回调,子类可以实现自己的需求
+    public void notifyData() {
+
+    }
+
+    @Override
+    public void doNextAction(Object action) {
+        if (action instanceof String) {
+            if (TextUtils.equals((String) action, IRefresh.class.getSimpleName())) {
+                refreshData();
+            }
+        }
+    }
 }

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtArticleVideo.java

@@ -21,7 +21,7 @@ import io.reactivex.Observable;
  * realicing@sina.com
  * 小绵羊3.4.5新增 -- 发现视频列表
  */
-public class FgtArticleVideo extends BaseListFragment2<DiscoveryVideo> {
+public class FgtArticleVideo extends BaseListFragment5<DiscoveryVideo> {
     @Override
     public void initView() {
         super.initView();

+ 64 - 85
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFind.java

@@ -41,17 +41,6 @@ import static com.sheep.gamegroup.util.UMConfigUtils.Event.FIND_TAG;
 public class FgtFind extends BaseFragment {
     private Activity activity;
 
-    @Override
-    public int getLayoutId() {
-        return R.layout.fgt_find;
-    }
-
-    @Override
-    public void onViewCreated() {
-        activity = getActivity();
-        initView();
-    }
-
     @BindView(R.id.indicator)
     TabLayout indicator;
     @BindView(R.id.pager)
@@ -74,7 +63,7 @@ public class FgtFind extends BaseFragment {
         mAdapter.add(FgtFindChild.newInstance(0), "全部");
         //悬浮
         ViewUtil.setImage(add_article_expand, ViewUtil.getNetImgByName("add_article_expand"));
-        if(!onlyChooseVideo) {
+        if (!onlyChooseVideo) {
             ViewUtil.setImage(add_article_iv, ViewUtil.getNetImgByName("add_article"));
             ViewUtil.setImage(add_article_camera, ViewUtil.getNetImgByName("add_article_camera"));
             ViewUtil.setImage(add_article_pic, ViewUtil.getNetImgByName("add_article_pic"));
@@ -86,14 +75,14 @@ public class FgtFind extends BaseFragment {
         add_article.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                if(onlyChooseVideo) {
+                if (onlyChooseVideo) {
                     Jump2View.getInstance().gotoActPublishArticle(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO);
                 } else {
                     changeAddArticle(add_article_iv.getVisibility() == View.VISIBLE);
                 }
             }
         });
-        if(!onlyChooseVideo) {
+        if (!onlyChooseVideo) {
             add_article_camera.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
@@ -114,6 +103,7 @@ public class FgtFind extends BaseFragment {
     }
 
     private boolean onlyChooseVideo = true;//只选择视频
+
     private void changeAddArticle(boolean isExpand) {
         ViewUtil.setVisibility(add_article_iv, !isExpand);
         ViewUtil.setVisibility(add_article_camera, !isExpand);
@@ -121,45 +111,35 @@ public class FgtFind extends BaseFragment {
         add_article_expand.setAlpha(isExpand ? 1.0f : 0.0f);
     }
 
+    @Override
+    public int getLayoutId() {
+        return R.layout.fgt_find;
+    }
+
+    @Override
+    public void onViewCreated() {
+        activity = getActivity();
+        initView();
+        initData();
+    }
+
     private void initData() {
         //尝试获取缓存数据
         List<ArticleTag> newList = DataUtil.getInstance().getCacheList(ApiKey.articles_tags, ArticleTag.class);
         if (ListUtil.isEmpty(newList)) {
-            initNetData();
+            initNetData(true);
         } else {
-            loadList(newList);
+            list.addAll(newList);
+            loadList();
         }
     }
 
     @Override
     public void initDataOnVisibleToUser() {
-        if (list.isEmpty()) {
-            try {
-                initData();
-            } catch (Exception e) {
-                e.printStackTrace();
-                G.showToast(e.getMessage());
-            }
-        }
-    }
 
-    private boolean isFirstOnResume = true;//第一次onResume
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (list.isEmpty() && !isFirstOnResume) {//非第一次时并且没有数据时调用该接口
-            try {
-                initData();
-            } catch (Exception e) {
-                e.printStackTrace();
-                G.showToast(e.getMessage());
-            }
-        }
-        isFirstOnResume = false;
     }
 
-    private void initNetData() {
+    private void initNetData(final boolean loadPager) {
         SheepApp.getInstance().getNetComponent().getApiService().getFindTagList()
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
@@ -167,8 +147,11 @@ public class FgtFind extends BaseFragment {
                     @Override
                     public void onNext(BaseMessage baseMessage) {
                         List<ArticleTag> newList = baseMessage.getDatas(ArticleTag.class);
-                        if (list.isEmpty() && !ListUtil.isEmpty(newList))//有缓存时不会加载,没有缓存时获取到数据会加载
-                            loadList(newList);
+                        list.clear();
+                        list.addAll(newList);
+                        if (loadPager && list.isEmpty() && !ListUtil.isEmpty(newList)) {
+                            loadList();
+                        }
                     }
 
                     @Override
@@ -178,55 +161,51 @@ public class FgtFind extends BaseFragment {
     }
 
     //没有添加数据返回true
-    private void loadList(List<ArticleTag> newList) {
-        if (!ListUtil.isEmpty(newList)) {
-            list.clear();
-            ListUtil.addAll(list, newList);
-            CommonUtil.getInstance().initUrlConfigByNet("awaken_on", new Action1<String>() {
-                @Override
-                public void call(String url) {
-                    int awaken_on = NumberFormatUtils.parseInteger(url);
-                    int count = 1;
-                    for (ArticleTag findLabel : list) {
-                        switch (findLabel.getName()) {
-                            case "视频":
-                                mAdapter.add(FgtArticleVideo.newInstance(findLabel.getId()), findLabel.getName());
-                                break;
-                            default:
-                                mAdapter.add(FgtFindChild.newInstance(findLabel.getId()), findLabel.getName());
-                                break;
-                        }
-                        count++;
-                    }
-                    if (awaken_on == 1) {
-                        count++;
-                        mAdapter.add(new FgtWatchFocus(), "看点", 2);
+    private void loadList() {
+        CommonUtil.getInstance().initUrlConfigByNet("awaken_on", new Action1<String>() {
+            @Override
+            public void call(String url) {
+                int awaken_on = NumberFormatUtils.parseInteger(url);
+                int count = 1;
+                for (ArticleTag findLabel : list) {
+                    switch (findLabel.getName()) {
+                        case "视频":
+                            mAdapter.add(FgtArticleVideo.newInstance(findLabel.getId()), findLabel.getName());
+                            break;
+                        default:
+                            mAdapter.add(FgtFindChild.newInstance(findLabel.getId()), findLabel.getName());
+                            break;
                     }
-                    pager.setAdapter(mAdapter);
-                    indicator.setupWithViewPager(pager);
-                    pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
-                        @Override
-                        public void onPageScrolled(int i, float v, int i1) {
+                    count++;
+                }
+                if (awaken_on == 1) {
+                    count++;
+                    mAdapter.add(new FgtWatchFocus(), "看点", 2);
+                }
+                pager.setAdapter(mAdapter);
+                indicator.setupWithViewPager(pager);
+                pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+                    @Override
+                    public void onPageScrolled(int i, float v, int i1) {
 
-                        }
+                    }
 
-                        @Override
-                        public void onPageSelected(int i) {
-                            ViewUtil.setVisibility(add_article, mAdapter.getItem(i) instanceof FgtArticleVideo);
-                            FIND_TAG.onEvent("find_tag_name", ListUtil.hasIndex(list, i - 1) ? list.get(i - 1).getName() : "全部");
-                        }
+                    @Override
+                    public void onPageSelected(int i) {
+                        ViewUtil.setVisibility(add_article, mAdapter.getItem(i) instanceof FgtArticleVideo);
+                        FIND_TAG.onEvent("find_tag_name", ListUtil.hasIndex(list, i - 1) ? list.get(i - 1).getName() : "全部");
+                    }
 
-                        @Override
-                        public void onPageScrollStateChanged(int i) {
+                    @Override
+                    public void onPageScrollStateChanged(int i) {
 
-                        }
-                    });
-                    CommonUtil.getInstance().reflex(indicator, activity);
-                    pager.setOffscreenPageLimit(count);
+                    }
+                });
+                CommonUtil.getInstance().reflex(indicator, activity);
+                pager.setOffscreenPageLimit(count);
 
-                }
-            });
-        }
+            }
+        });
     }
 
     private List<ArticleTag> list = ListUtil.emptyList();

+ 13 - 4
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFindChild.java

@@ -51,7 +51,10 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED;
  * Created by realicing on 2018/9/7.
  * realicing@sina.com
  */
-public class FgtFindChild extends BaseListFragment2<Article> {
+public class FgtFindChild extends BaseListFragment5<Article> {
+
+    private int type;
+
     @Override
     protected RecyclerView.Adapter getAdapter() {
         return new CommonRecycler(list);
@@ -72,8 +75,6 @@ public class FgtFindChild extends BaseListFragment2<Article> {
         return Article.class;
     }
 
-    private int type;
-
     public static FgtFindChild newInstance(int type) {
         FgtFindChild fgt = new FgtFindChild();
         Bundle bundle = new Bundle();
@@ -231,6 +232,14 @@ public class FgtFindChild extends BaseListFragment2<Article> {
     }
 
     @Override
+    public void onViewCreated() {
+        super.onViewCreated();
+        if (type == 0) {
+            ViewUtil.refreshXrv(view_list);
+        }
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
@@ -277,7 +286,7 @@ public class FgtFindChild extends BaseListFragment2<Article> {
         public CommonRecycler(List<Article> list) {
             super(SheepApp.getInstance(), list);
             commonConverter = new CommonConverter();
-            if(!TestUtil.isLTVersion3_4_5())
+            if (!TestUtil.isLTVersion3_4_5())
                 newsConverter = new NewsConverter();
         }
 

+ 1 - 2
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtPlayGame.java

@@ -167,8 +167,7 @@ public class FgtPlayGame extends BaseFragment {
         RefreshUtil.newInstance().publicParameter(refresh, activity);
         initGameListType3List();
         initGameListType2List();
-        if(refresh != null)
-            refresh.autoRefresh();
+        refresh.autoRefresh();
     }
 
     public static final String[] gameListType3Titles = {"每日必玩", "近期最热", "猜你喜欢"};

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtWatchFocus.java

@@ -44,7 +44,7 @@ import io.reactivex.Observable;
  * realicing@sina.com
  * 看点
  */
-public class FgtWatchFocus extends BaseListFragment2<RouserArticlesEntity> {
+public class FgtWatchFocus extends BaseListFragment5<RouserArticlesEntity> {
 
     @Override
     protected RecyclerView.Adapter getAdapter() {

+ 3 - 1
app/src/main/java/com/sheep/jiuyan/samllsheep/base/BaseFragment.java

@@ -3,6 +3,7 @@ package com.sheep.jiuyan.samllsheep.base;
 import android.os.Bundle;
 import android.support.annotation.IdRes;
 import android.support.annotation.Nullable;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -94,7 +95,7 @@ public abstract class BaseFragment extends RxFragment {
 
     //绑定view
     public void butterKnifeBindView() {
-        if(userButterKnife() && getView() != null)
+        if (userButterKnife() && getView() != null)
             unbinder = ButterKnife.bind(this, getView());
     }
 
@@ -194,6 +195,7 @@ public abstract class BaseFragment extends RxFragment {
         }
         return false;
     }
+
     public void doNextAction(Object action) {
 
     }