Android使用Fragment的懒加载

之前一直想过使用懒加载,但是自己又比较懒惰,不想去看怎么实现的,就直接使用了别人写好的或者说是封装好的,拿来直接使用了.

一般我们会使用viewpager+fragment来实现一些界面操作;

但是我们希望在actviity可见的时候,只显示当前的fragment,这个时候呢,第一个可见的fragment数据加载了,但是其他fragment此时是不可见的,那么就不是很希望将其他几个fragment的数据也加载了;此时我们就希望用到懒加载,当界面可见的时候fragment才会加载数据;主要是通过setUserVisibleHint
这个方法来是实现懒加载.

ok,基本上使用情境我们也了解了,下面步入正题;

1.我们写了一个fragment,继承v4或者非v4包下的Fragment

2.声明一个成员变量View mView ;在onCreateView的方法中,使用如下判断

.if(mView==null) {

mView= inflater.inflate(R.layout.fragment_goodsmanager, container,false);

unbinder= ButterKnife.bind(this,mView);

}

return mView;

3.在onViewCreated方法中,我们需要判断当前fragment是否可见,

if(getUserVisibleHint()) { // 若可见

    if(!hasLoadData) {//第一次打开activity的时候会走到这里,该标志是判断数据是否已经加载,我们会在setUserVisibleHint中进行其他操作;
     loadGoodsDatas();// 若此时已经可见,并且数据还没有加载那么就可以加载数据了

      hasLoadData=true;

}

}

super.onViewCreated(view, savedInstanceState);

3.我们重写了setUserVisibleHint方法;

super.setUserVisibleHint(isVisibleToUser);

// setUserVisibleHint可能会在onCreat方法之前执行,其生命周期执行顺序是不可预知的;

if(mView==null) {// 先于onCreateView方法执行的话,此时就不能执行加载数据的方法,因为会造成空指针异常

return;

}

// 若此时view依镜创建完成,而且数据尚未加载那么就可以执行网络加载数据的方法

if(!hasLoadData&& isVisibleToUser) {

loadGoodsDatas();

hasLoadData=false;

}

ok基本完毕,不明确以及错误的地方还请指正,谢谢.

    原文作者:正阳Android
    原文地址: https://www.jianshu.com/p/93790027819c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞