您的位置:首页 > 移动开发 > Android开发

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

2016-06-23 11:28 906 查看
使用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
}

}


点击免费下载示例代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息