viewpager特性:我们在开发过程中经常会用到viewpager+fragment组合来实现页面的切换,谷歌为了增强用户体验,ViewPager加载页面时默认会预加载当前界面的上一页面和下一页面,并销毁其他页面,这样会导致一个问题切换页面时会加载大量的数据,这样会需要消耗用户大量的数据流量,并且每次切换的时候由于加载的数据量比较大,会导致页面每次切换有在加载状态,并且会有一种卡顿的用户体验。
需求:当ViewPager中滑动至某个页面时,才加载当前页面的数据,为此引入了一个概念懒加载
什么是懒加载呢?
就是设置viewpager 的预加载页面数为0,viewpager里面有一个属setOffscreenPageLimit,设置预加载页面数,但是通过源码会发现:当设置0时,不起作用的。
为什么viewpager.setOffscreenPageLimit
private static final intDEFAULT_OFFSCREEN_PAGES=1;
private intmOffscreenPageLimit=DEFAULT_OFFSCREEN_PAGES;
如下是viewpager 的源码:当limit为0时,是不起作用的,因此我们需要自定义一个viewpager
LazyViewPager 设置private static final intDEFAULT_OFFSCREEN_PAGES=0;即可
之后写代码都使用这个ViewPager就可以实现懒加载了。
这里有一点要注意一下,不要使用API版本过高的ViewPager源码,在高版本源码中(ViewPager接近3000行),谷歌改了其中一些逻辑,
即使修改这个参数,也无济于事。
最好找14左右的ViewPager源码。