ViewPager + Fragment实现懒加载

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

ViewPager + Fragment实现懒加载

标签(空格分隔): Android课程


http://blog.csdn.net/tellh/article/details/50705178
http://www.jianshu.com/p/c5d29a0c3f4c

推荐框架
https://github.com/lianghanzhen/LazyViewPager

介绍

懒加载,指的是必要的时候才加载,否则不进行View的绘制和数据的加载。原因是Viewpager一次只会显示一个页面,那么初始进来时,只需加载第一张Fragment页卡,其他的不加载,当用户向右滑动切换再进行加载。
因为其他Fragment对于用户来说是不可见的,如果一开始就把全部Fragment一起加载,可能造成启动时卡顿的问题,更重要的是可能白白耗费用户的流量,因为用户可能并不需要其他Fragment的信息。

Fragment使用介绍

  • viewPager.setOffscreenPageLimit()方法设置ViewPager允许有多少张pages存在于屏幕外(不包括正在显示的page),默认值是1。在范围之外的pages 的View会被销毁,即onDestroyView()会被执行。
  • 刚被new出来的Fragment并没有开始它的生命周期,当它被添加到FragmentManager时生命周期才开始。
  • setUserVisibleHint(),该方法在Fragment被用户可见时会调用且传入true值,不可见时则得到false值
  • 延迟加载实现:当前界面(Fragment)可见,并且Fragment已经初始化完毕、网络数据未加载,则请求数据

代码实现

public abstract class BasePageFragment extends Fragment {
    //是否可见
    protected boolean isVisible;
    //View是否初始化
    protected boolean isViewInit;
    //数据是否初始化
    protected boolean isDataInit;
    /**
     * 在Activity完成其onCreate()回调之后调用
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        isViewInit = true;
        prepareFetchData();
    }
    /**
     * 当fragment被用户可见时,setUserVisibleHint()会调用且传入true值,
     * 当fragment不被用户可见时,setUserVisibleHint()则得到false值
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.isVisible = isVisibleToUser;
        prepareFetchData();
    }
    public boolean prepareFetchData() {
        //当前界面(Fragment)可见,并且Fragment已经初始化完毕、网络数据未加载,则请求数据
        if (isVisible && isViewInit && !isDataInit) {
            fetchData();
            isDataInit = true;
            return true;
        }
        return false;
    }
    public abstract void fetchData();
}

猜你喜欢

转载自blog.csdn.net/weixin_39397471/article/details/77325556