大家都知道ViewPager有预加载的功能,即在显示当前页时会加载左右各一个View,那源码中是如何体现的呢?
查看源码发现:ViewPager的成员变量:
private static final int DEFAULT_OFFSCREEN_PAGES = 1;
继续跟踪:
private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES;
继续:发现源码中在populate方法里:
final int pageLimit = mOffscreenPageLimit;
并且其中有一行注释信息:
// Add and remove pages in the existing list.
所以很明显,预加载和删除就是此注释后实现,对于如何实现这里暂时不做研究
注意在此注释前几个变量的赋值:
//决定最初始加载哪一页
final int startPos = Math.max(0, mCurItem - pageLimit);
//通过适配器计算共有几页
final int N = mAdapter.getCount();
//决定最后加载哪一页
final int endPos = Math.min(N-1, mCurItem + pageLimit);
当ViewPager显示第0页时:
startPos=Math.max(0,-1)=0
endPos=Math.min(2,1)=1
即此时预加载第0,1页
当ViewPager显示第1页时:
startPos=Math.max(0,0)=0
endPos=Math.min(2,2)=2
即此时预加载第0,2页
当ViewPager显示第2页时:
startPos=Math.max(0,1)=1
endPos=Math.min(2,3)=2
即此时预加载第1,,2页
所以当我们需要修改ViewPager的预加载时只要修改DEFAULT_OFFSCREEN_PAGES即可
当ViewPager显示第1页时:
startPos=Math.max(0,0)=0
endPos=Math.min(2,2)=2
即此时预加载第0,2页