ViewPager + Fragment实现懒加载

来源:互联网 发布:信息技术考试软件 编辑:程序博客网 时间:2024/05/16 12:12

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();}
原创粉丝点击