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 }
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的数据
以上是关于Fragment的懒加载的主要内容,如果未能解决你的问题,请参考以下文章
Android Fragment + ViewPager的懒加载实现
Android Fragment + ViewPager的懒加载实现