Fragment + viewpager 实现 懒加载 封装

来源:互联网 发布:pdf电子书资源 知乎 编辑:程序博客网 时间:2024/05/29 03:49

       fragment实现懒加载,有几个前提,首先是fragment已经执行了oncreateview方法(isPrepared),其次是fragment可见(isVisiable),最后是fragment需要的数据没有加载过(isNotLoad)。。。最重要的是,你的viewpager得给所有的fragment开启缓存

满足这三个条件,fragment才需要进行懒加载操作。。。


public class DemoFragment extends Fragment{    boolean isPrepared = false;    boolean isVisiable = false;    boolean isNotLoaded = true;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        isPrepared = true;        onLoadData(); //如果这个是viewpager的第一个出现的fragment,需要在createview的时候手动调用一次onLoadData        return super.onCreateView(inflater, container, savedInstanceState);    }    @Override    public void setUserVisibleHint(boolean isVisibleToUser) {        super.setUserVisibleHint(isVisibleToUser);        if(getUserVisibleHint()){            isVisiable = true;            onLoadData();        }else {            isVisiable = false;        }    }        public void onLoadData(){        if (!isPrepared || !isNotLoaded || !isVisiable)            return;        getData();    }        public void getData(){        //获取数据        isNotLoaded = false;//或者在数据返回的onsuccess的时候改为true;    }    }

当然你也可以写一个基类,然后只需要复写loadData方法,进行三个参数的判断来进行数据加载。。。这种方法有个不好的地方,数据需要刷新的时候,需要自己手动刷新。。。。解决方法是,用Acache缓存你取到的数据,然后给数据设置过期时间,然后再加一个判断条件,或者把IsNotLoad改成判断数据是否为空,为空切可见切执行过oncreateview就进行数据加载,因为Acache缓存的数据可以设置过期时间,时间过期了,数据就为空了。。。就能再次执行onLoaddata方法了