Fragment的懒加载

Posted 短暂的火光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment的懒加载相关的知识,希望对你有一定的参考价值。

   当我们的Viewpager含有很多个fragment时 一次全加载出来太占内存 我们可以用fragment的懒加载  当fragment可见的时候加载数据

Viewpager加载fragment的时候有个特点  会预加载当前可见页面左右相邻的页面  相邻的页面会走一遍生命周期(从onAttach直到onResume)

 

  

技术分享
 1 /*
 2  * Date: 14-7-17
 3  * Project: Access-Control-V2
 4  */
 5 package cn.irains.access_control_v2.common;
 6 
 7 import android.support.v4.app.Fragment;
 8 
 9 /**
10  * Author: msdx ([email protected])
11  * Time: 14-7-17 下午5:46
12  */
13 public abstract class LazyFragment extends Fragment {
14     protected boolean isVisible;
15     /**
16      * 在这里实现Fragment数据的缓加载.
17      * @param isVisibleToUser
18      */
19     @Override
20     public void setUserVisibleHint(boolean isVisibleToUser) {
21         super.setUserVisibleHint(isVisibleToUser);
22         if(getUserVisibleHint()) {
23             isVisible = true;
24             onVisible();
25         } else {
26             isVisible = false;
27             onInvisible();
28         }
29     }
30 
31     protected void onVisible(){
32         lazyLoad();
33     }
34 
35     protected abstract void lazyLoad();
36 
37     protected void onInvisible(){}
38 }
lazyfragment

setUserVisibleHint(boolean isVisibleToUser)在onCreateView之前执行 

 

然后去定义一个类继承上边的父类

技术分享
 1 /*
 2  * Date: 14-7-17
 3  * Project: Access-Control-V2
 4  */
 5 package cn.irains.access_control_v2.common;
 6 
 7 import android.support.v4.app.Fragment;
 8 
 9 /**
10  * Author: msdx ([email protected])
11  * Time: 14-7-17 下午5:46
12  */
13 public abstract class LazyFragment extends Fragment {
14     protected boolean isVisible;
15     /**
16      * 在这里实现Fragment数据的缓加载.
17      * @param isVisibleToUser
18      */
19     @Override
20     public void setUserVisibleHint(boolean isVisibleToUser) {
21         super.setUserVisibleHint(isVisibleToUser);
22         if(getUserVisibleHint()) {
23             isVisible = true;
24             onVisible();
25         } else {
26             isVisible = false;
27             onInvisible();
28         }
29     }
30 
31     protected void onVisible(){
32         lazyLoad();
33     }
34 
35     protected abstract void lazyLoad();
36 
37     protected void onInvisible(){}
38 }
View Code

这样就保证了 只有在fragment可见时才去加载数据  不会造成activity一次加载很多fragment的数据

以上是关于Fragment的懒加载的主要内容,如果未能解决你的问题,请参考以下文章

Android Fragment + ViewPager的懒加载实现

Android Fragment + ViewPager的懒加载实现

viewpager+fragment的懒加载实现微信点击和滑动切换功能(切换效果)

重新加载时刷新片段

封装篇——Fragment懒加载

ViewPager2+Fragment操作笔记