viewpager+fragment 预加载问题

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源码。

viewpager+fragment 预加载问题_第1张图片

你可能感兴趣的:(viewpager+fragment 预加载问题)