Android 解决ViewPager+Fragment懒加载的问题

使用ViewPager+Fragment的朋友应该知道其具有懒加载机制的,其实懒加载机制是Viewpager
所具有的,看过ViewPager源码的都会知道里面设置的有默认的懒加载的页数,默认的是1,这个1可不是我们通常所说的一页,这个1是左右各一页的意思。
这里写图片描述
比如说当进入应用时默认显示的是第一页,因为第一页左边没有要加载的页面,此时只会加载推荐和地图,如果你点击服务的时候,打印日志你就会发现此时加载的不再仅仅是服务,它会同时加载地图和客服共三个界面的数据。
下面是源码里面的懒加载的默认值
这里写图片描述
下面是默认进入界面为推荐页面时的日志:
这里写图片描述
当默认界面为服务的时候的日志:
这里写图片描述
通过日志可以发现默认的1其实一共是加载了三个界面的数据。那么我们如何解决懒加载的机制呢?
第一种方式就是把源码里面的Viewpager类里面的代码全部复制出来到自定义的一个类里面把默认值改为0即可。
为什么要自定义一个类而不是直接通过setOffscreenPageLimit(int limit)来设置为0呢?看源码你会发现,里面有一个关于limit参数的最小限制如果设置的参数小于1的话会赋值为默认值,仍是默认的1.所以建议自定义一个类,把默认值修改为0。如果设置的值大于1的话就可以直接使用setOffscreenPageLimit(int limit)此方法即可。

 public void setOffscreenPageLimit(int limit) {
        if (limit < DEFAULT_OFFSCREEN_PAGES) {
            Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to "
                    + DEFAULT_OFFSCREEN_PAGES);
            limit = DEFAULT_OFFSCREEN_PAGES;
        }
        if (limit != mOffscreenPageLimit) {
            mOffscreenPageLimit = limit;
            populate();
        }
    }

第二种方式就是重写 setUserVisibleHint这个方法。具体代码如下:

   @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            // 相当于Fragment的onResume
        } else {
            // 相当于Fragment的onPause
        }

  }

点击免费下载示例代码

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值