Fragment + viewpager 实现 懒加载 封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16624353/article/details/78838194

       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方法了

猜你喜欢

转载自blog.csdn.net/qq_16624353/article/details/78838194