ViewPager禁止预加载-滑动到那个页面再加载网络数据

ViewPager禁止预加载,滑动到那个页面在加载网络数据

@(标签)[Android, ViewPager, 预加载, setUserVisibleHint, 2016-09-18, zhongzilu, 钟子路]


用过Android ViewPager的同学都知道,ViewPager预加载是3页,可以取消预加载,但是滑动页面会卡,不推荐。但如果不做限制,这样感觉又比较浪费资源,因为用户很可能只看了第一个,后面两个根本想不想看,结果还是加载了。更糟的是,如果你的Fragment在初始化时需要从网络加载大量的数据,这对资源消耗和用户体验都是不好的。

那么有没有什么办法可以让用户在看到哪个页面的时候再去加载页面数据呢?

答案当时有的,在使用的ViewPager的时候,通常我是采用的ViewPager + Fragment的方式,这个时候我们可以使用Fragment中的setUserVisibleHint()方法,直接在Fragment中覆写该方法:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
        //在这里加载数据
    }
}

这样就能在Fragment显示出来的时候再去加载数据了,但是这样有个问题,每次加载Fragment的时候都会去重新加载一次,为了避免这个问题,我们用一个boolean类型的全局变量isFirst来表示只在第一次呈现的时候才加载数据,修改过后的代码如下:

private boolean isFirst = true;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser && isFirst){
        //在这里加载数据
        isFirst = false;
    }
}

这样就能满足使用ViewPager时禁用预加载的要求了!是不是很简单?

作者钟子路(zhongzilu)
原文地址: https://zhongzilu.github.io/2016/09/19/viewpager禁止预加载,滑动到那个页面再加载网络数据/

本文总阅读量