Explorar o código

优化猜你喜欢等游戏列表界面刷新界面时,先显示加载中,再更新数据

zengjiebin %!s(int64=7) %!d(string=hai) anos
pai
achega
8bb667b000

+ 58 - 21
app/src/main/java/com/sheep/gamegroup/absBase/BaseListActivity2.java

@@ -51,6 +51,14 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
         }
     }
 
+    //使用布局中自带的无数据空view
+    public boolean useSelfEmpty() {
+        return true;
+    }
+    //只有一页数据
+    public boolean onlyOnePage() {
+        return false;
+    }
     public static final int REFRESH_ON_CREATE = 0;
     public static final int REFRESH_ON_RESUME = 1;
     public static final int REFRESH_ON_YOURSELF = -1;
@@ -64,7 +72,6 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
     protected BaseMessage lastMessage;//最后一个网络获取的结果
     protected int page = 1;//页数
     protected int per_page = DataUtil.PER_PAGE;
-    private boolean loadMore;
 
     protected View bottomLine;
 
@@ -78,6 +85,11 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
 
             @Override
             public void onLoadMore() {
+                if(onlyOnePage()){
+                    if(view_list != null)
+                        view_list.loadMoreComplete();
+                    return;
+                }
                 loadMoreData();
 
             }
@@ -88,17 +100,13 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
     }
 
     public void loadMoreData() {
-        if (!loadMore) {
-            loadMore = true;
-            if (ListUtil.size(list) >= per_page * page) {
-                page += 1;
-                mInitData();
-            } else {
-                view_list.setNoMore(true);
-                setNoMore(true);
-            }
+        initDataStatus = STATUS_ING;
+        if (ListUtil.size(list) >= per_page * page) {
+            page += 1;
+            mInitData();
         } else {
-            view_list.loadMoreComplete();
+            view_list.setNoMore(true);
+            setNoMore(true);
         }
     }
 
@@ -124,6 +132,7 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
     public void mInitData() {
         final String urlKey = getKey(page, per_page);
         if (isFirstGetACache()) {
+            initDataStatus = STATUS_CACHE;
             //先尝试获取缓存数据
             lastCacheList = DataUtil.getInstance().getCacheList(urlKey, getTClass(), conversion, page);
             loadList(lastCacheList);
@@ -140,6 +149,7 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
                 }
             }
         });
+        initDataStatus = STATUS_NET;
         getApi(SheepApp.getInstance().getNetComponent().getApiService())
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
@@ -154,14 +164,17 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
 
                             List<T> newList = conversion.convert(baseMessage, page);
                             loadList(newList);
+                            initDataStatus = STATUS_FINISH;
                         } else {
                             notifyDataSetChanged();
+                            initDataStatus = STATUS_NONE;
                         }
                     }
 
                     @Override
                     public void onError(BaseMessage baseMessage) {
                         notifyDataSetChanged();
+                        initDataStatus = STATUS_NONE;
                     }
                 });
     }
@@ -196,14 +209,18 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
     public void clear() {
         lastMessage = null;
         setNoMore(false);
-        empty_view.setVisibility(View.INVISIBLE);
+        if (useSelfEmpty()) {
+            ViewUtil.setVisibility2(empty_view, true);
+            CommonUtil.getInstance().resetEmptyView(empty_view);
+        }
         list.clear();
         page = 1;
     }
 
     public void refreshData() {
+        initDataStatus = STATUS_ING;
         clear();
-        view_list.getAdapter().notifyDataSetChanged();
+        ViewUtil.notifyDataSetChanged(view_list);
         mInitData();
     }
 
@@ -216,24 +233,34 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
     }
 
     public void notifyDataSetChanged() {
-        if (view_list == null)
-            view_list = findViewById(R.id.view_list);
-        if (empty_view == null)
-            empty_view = findViewById(R.id.empty_view);
-        loadMore = false;
+        if (view_list == null || empty_view == null) {
+            return;
+        }
         updateEmptyView();
         if (page == 1) {
             view_list.refreshComplete();
         } else {
             view_list.loadMoreComplete();
         }
-        view_list.getAdapter().notifyDataSetChanged();
+        ViewUtil.notifyDataSetChanged(view_list);
         notifyData();
-        view_list.getFootView().setVisibility(view_list.getAdapter().getItemCount() == 0 ? View.GONE : View.VISIBLE);
+        if(view_list.getAdapter() != null)
+            view_list.getFootView().setVisibility(view_list.getAdapter().getItemCount() == 0 ? View.GONE : View.VISIBLE);
     }
 
     protected void updateEmptyView() {
-        CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
+        if (useSelfEmpty()) {
+            switch (initDataStatus){
+                case STATUS_CACHE:
+                    if(!list.isEmpty())
+                        CommonUtil.getInstance().updateEmptyView(empty_view, false);
+                    break;
+                case STATUS_NET:
+                default:
+                    CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
+                    break;
+            }
+        }
     }
 
     @Override
@@ -265,4 +292,14 @@ public abstract class BaseListActivity2<T> extends BaseActivity implements IRefr
     public void notifyData() {
 
     }
+    protected int initDataStatus = STATUS_NONE;//加载数据的状态
+    public static final int STATUS_NONE = 0;
+    public static final int STATUS_ING = 1;
+    public static final int STATUS_CACHE = 2;//获取缓存数据中
+    public static final int STATUS_NET = 3;
+    public static final int STATUS_FINISH = 4;
+    //是否正在刷新或者加载更多数据
+    public boolean isLoadingData(){
+        return initDataStatus == STATUS_ING;
+    }
 }

+ 7 - 2
app/src/main/java/com/sheep/gamegroup/view/activity/ActPlayGameUserLikeList.java

@@ -50,9 +50,14 @@ public class ActPlayGameUserLikeList extends BaseListActivity2<GameEntity> {
     }
 
     @Override
+    public boolean onlyOnePage() {
+        return true;
+    }
+
+    @Override
     public void notifyDataSetChanged() {
-        if(!list.isEmpty())
-            setNoMore(true);
+        setNoMore(true);
+        view_list.setNoMore(true);
         super.notifyDataSetChanged();
     }
 }

+ 1 - 0
app/src/main/res/layout/net_empty_xrecycler.xml

@@ -2,6 +2,7 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@color/white"
     android:fitsSystemWindows="true">
 
     <include