ViewPager限定预加载的页面个数setOffscreenPageLimit(int limit)

ViewPager里面还定义了一个 
    private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES;默认值 是1,这表示你的预告加载的页面数量是1,假设当前有四个Fragment的tab,显示一个,预先加载下一个.这样你在移动前就已经加载了下一个界面,移动时就可以看到已经加载的界面了. 

从日志里面可以看到onActivityCreated等方法在初始化第一个Fragment完成后就会初始化下一个Fragment. 

假设你想预先加载多个Fragment可以使用它提供的公共方法: 

public void setOffscreenPageLimit(int limit) {
    if(limit < 1) {
        Log.w("ViewPager", "Requested offscreen page limit " + limit + " too small; defaulting to " + 1);
        limit = 1;
    }

    if(limit != this.mOffscreenPageLimit) {
        this.mOffscreenPageLimit = limit;
        this.populate();
    }

}  

从这个方法来看,不管你设置什么值,至少会预先加载下一个Fragment,你想预先加载几个就可以传入相应的参数.  
这种情况如音乐播放时,如果有自动加载歌词就可以使用了.  
  
如果你的界面需要加载一些大量的数据,但你不想预先加载下一个界面(需要网络或耗时的操作),使用ViewPager却很无耐.特别是下一个界面有可能你一段很长时间不会使用到,如微博,在显示主页后我不想立即加载下一个界面,因为都有ListView,如果我不访问它,就不必加载无用的资源.  
  
可以通过修改这个值,但有,修改后就会有一个麻烦的地方,因为移动时不会预先加载下一个界面的关系,所以会看到一片黑色的背景.  
  
如果不介意黑色背景,可以覆盖这个类,然后定义默认的加载数量为0  
private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES=0;就是不预先加载下一个界面.  
  
如果想预加载,可以使用原来的ViewPager,或这里直接改为mOffscreenPageLimit=你要加载的数量。  
  
由于sdk的更新问题,不是所有v4 support都适合的,v17时就换了  
  
例外,若果我们设定mOffscreenPageLimit = 1,则当我们我们滑到第三个页面的时候,第一个页面的视图将被销毁,当我们滑到第一个页面时,第三个页面的视图会被销毁。但滑到第二个页面时,三个界面的视图都不会销毁。

其实这个值指的是,当前view的左右两边的预加载的页面的个数。也就是说,如果这个值mOffscreenPageLimit = 3,那么任何一个页面的左边可以预加载3个页面,右边也可以加载3页面。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值