当我们的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 }
这样就保证了 只有在fragment可见时才去加载数据 不会造成activity一次加载很多fragment的数据
时间: 2024-08-02 06:54:35