Bladeren bron

实现懒加载

詹子聪 5 jaren geleden
bovenliggende
commit
93ad8478c5

+ 7 - 1
app/src/main/java/com/itant/shibei/ui/home/about/AboutFragment.java

@@ -32,12 +32,18 @@ public class AboutFragment extends BaseMVPFragment implements View.OnClickListen
 
     @Override
     public void onCreateViewFinished(@Nullable Bundle savedInstanceState) {
-        super.onCreateViewFinished(savedInstanceState);
         TextView tv_title = rootView.findViewById(R.id.tv_title);
         tv_title.setText(" 拾贝 v" + SystemTool.getVersionName(getActivity()));
         rootView.findViewById(R.id.tv_feedback).setOnClickListener(this);
         rootView.findViewById(R.id.tv_update).setOnClickListener(this);
         rootView.findViewById(R.id.tv_more).setOnClickListener(this);
+
+        super.onCreateViewFinished(savedInstanceState);
+    }
+
+    @Override
+    protected void onLazyLoad() {
+
     }
 
     @Override

+ 5 - 2
app/src/main/java/com/itant/shibei/ui/home/coupon/TemplateFragment.java

@@ -60,8 +60,6 @@ public class TemplateFragment extends BaseMVPFragment implements ITemplateView<C
 
     @Override
     public void onCreateViewFinished(@Nullable Bundle savedInstanceState) {
-        super.onCreateViewFinished(savedInstanceState);
-
         rv_template = rootView.findViewById(R.id.rv_template);
         // 必须要设置LayoutManager,否则RecyclerView不知道要使用什么布局,从而在界面上不显示
         LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
@@ -109,6 +107,11 @@ public class TemplateFragment extends BaseMVPFragment implements ITemplateView<C
             }
         });
 
+        super.onCreateViewFinished(savedInstanceState);
+    }
+
+    @Override
+    protected void onLazyLoad() {
         // 获取数据
         srl_template.setRefreshing(true);
         mPresenter.getTemplateData(mCurrentPage, PAGE_SIZE);

+ 5 - 2
app/src/main/java/com/itant/shibei/ui/home/goods/GoodsFragment.java

@@ -59,8 +59,6 @@ public class GoodsFragment extends BaseMVPFragment implements IGoodsView, ITopAc
 
     @Override
     public void onCreateViewFinished(@Nullable Bundle savedInstanceState) {
-        super.onCreateViewFinished(savedInstanceState);
-
         rv_goods = rootView.findViewById(R.id.rv_goods);
         // 必须要设置LayoutManager,否则RecyclerView不知道要使用什么布局,从而在界面上不显示
         LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
@@ -107,6 +105,11 @@ public class GoodsFragment extends BaseMVPFragment implements IGoodsView, ITopAc
             }
         });
 
+        super.onCreateViewFinished(savedInstanceState);
+    }
+
+    @Override
+    protected void onLazyLoad() {
         // 获取数据
         srl_goods.setRefreshing(true);
         goodsPresenter.getGoodsData(mCurrentPage, PAGE_SIZE);

+ 6 - 2
app/src/main/java/com/itant/shibei/ui/home/tool/ToolFragment.java

@@ -35,8 +35,6 @@ public class ToolFragment extends BaseMVPFragment implements View.OnClickListene
 
     @Override
     public void onCreateViewFinished(@Nullable Bundle savedInstanceState) {
-        super.onCreateViewFinished(savedInstanceState);
-
         tv_weather = rootView.findViewById(R.id.tv_weather);
         tv_yiji = rootView.findViewById(R.id.tv_yiji);
         rootView.findViewById(R.id.fl_get_json).setOnClickListener(this);
@@ -44,6 +42,12 @@ public class ToolFragment extends BaseMVPFragment implements View.OnClickListene
         rootView.findViewById(R.id.fl_weather).setOnClickListener(this);
         rootView.findViewById(R.id.fl_yiji).setOnClickListener(this);
         rootView.findViewById(R.id.fl_biao_qing).setOnClickListener(this);
+
+        super.onCreateViewFinished(savedInstanceState);
+    }
+
+    @Override
+    protected void onLazyLoad() {
         mSystemPresenter.getSystemConfig();
     }
 

+ 36 - 2
mvp/src/main/java/com/miekir/mvp/view/BaseMVPFragment.java

@@ -14,7 +14,15 @@ import java.util.ArrayList;
 import java.util.List;
 
 
-public abstract class BaseMVPFragment extends BaseFragment implements IView{
+public abstract class BaseMVPFragment extends BaseFragment implements IView {
+    /**
+     * 是否被创建了
+     */
+    protected boolean isViewCreated;
+    /**
+     * 当前是否可见
+     */
+    protected boolean isUIVisible;
 
     private List<BasePresenter> mInjectPresenters;
 
@@ -43,8 +51,35 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView{
                 }
             }
         }
+
+        isViewCreated = true;
+        loadData();
     }
 
+    @Override
+    public void setUserVisibleHint(boolean isVisibleToUser) {
+        super.setUserVisibleHint(isVisibleToUser);
+        isUIVisible = isVisibleToUser;
+        if (isVisibleToUser) {
+            loadData();
+        }
+    }
+
+    /**
+     * 懒加载,当Fragment可见的时候,再去加载数据
+     * 应用初始化会先调用完所有的setUserVisibleHint再调用onViewCreated,然后切换的时候,就只调用setUserVisibleHint了
+     */
+    private void loadData() {
+        if (isViewCreated && isUIVisible) {
+            isViewCreated = false;
+            isUIVisible = false;
+            onLazyLoad();
+        }
+    }
+
+
+    protected void onLazyLoad(){}
+
     @Override
     public void showToast(String message) {
         ToastTool.showShort(message);
@@ -61,5 +96,4 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView{
             mInjectPresenters = null;
         }
     }
-
 }