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)此方法即可。
第二种方式就是重写 setUserVisibleHint这个方法。具体代码如下:
点击免费下载示例代码
所具有的,看过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 } }
点击免费下载示例代码
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories