ViewPager+Fragment 懒加载学习笔记(一)
2017-07-27 18:25
399 查看
需求
想要 Fragment 显示时候再去加载数据,现在存在问题是:选中当前 Fragment 时候,它两旁的 Fragment 也会同时加载数据。如果页面数据量比较大或者加载较多大图时候(例如:加载相册集),会导致卡顿。分析问题
1、为什么 ViewPager 会有预加载机制?个人猜测是为了使 ViewPager 来回切换流畅;
网上查到资料都是 如何防止或者禁止 ViewPager 的预加载,其中关键方法
private static final int DEFAULT_OFFSCREEN_PAGES = 1; private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES; public void setOffscreenPageLimit(int limit));
2、分析 setOffscreenPageLimit 这个方法
ViewPager 可以通过设置 setOffscreenPageLimit(1); // 表示预告加载的页面数量是 1,假设当前有四个Fragment的tab,显示一个,预先加载下一个.这样你在移动前就已经加载了下一个界面,移动时就可以看到已经加载的界面了;
为了解决禁止预加载问题,如果通过这个方法会不会生效?
答案是:无效。
为什么?
通过分析源码,会看到 limit 这个参数,如果小于 DEFAULT_OFFSCREEN_PAGES (DEFAULT_OFFSCREEN_PAGES = 1)这个默认值, limit 会被赋值 默认值 DEFAULT_OFFSCREEN_PAGES。所以我们为了取消预加载机制,通过设置 setOffscreenPageLimit(0)是没有用的。
源码:
private static final int DEFAULT_OFFSCREEN_PAGES = 1; private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES; 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(); } }
解决方案
下一篇文章进行学习总结链接: ViewPager+Fragment 懒加载学习笔记(二)
相关文章推荐
- ViewPager+Fragment 懒加载学习笔记(二)
- 安卓智慧上海学习笔记系列——禁用ViewPager页面切换效果及不自动加载下一页数据
- 安卓学习笔记---ViewPager+Fragment第二次进入显示空白
- Android Viewpager+Fragment取消预加载及Fragment方法的学习
- android Viewpager取消预加载及Fragment方法的学习
- Android之Fragment+ViewPager实现点击+滑动界面切换学习笔记
- 防止ViewPager和Fragment结合使用时候的数据预加载
- 使用ViewPager加载页面出现空白--笔记
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- Fragment+ViewPager实现真正的懒加载
- fragment+viewpager学习一(高仿微信5.2.1主界面)
- Android之ViewPager+Fragment实现懒加载
- ViewPager+Fragment取消预加载(延迟加载)
- FragmentViewpager与Fragment实现懒加载
- fragment 懒加载 viewpager 取消预加载
- ViewPager+Fragment的预加载问题
- fragment 与viewpager预加载的解决 懒加载
- iOS学习笔记13— UITableView封装之下拉-上提-图片异步加载
- 关于Fragment中viewpager的子fragment不能加载布局的问题
- 【Android】Fragment懒加载和ViewPager的坑