使用过ViewPager的应该都知道,ViewPager的setoffscreenpagelimit()
方法,使用该方法能够设置在ViewPager滑动时,左右两侧各保存多少个页面,那咱们直接设置setoffscreenpagelimit(0)
,不就行了吗。固然不是这样子的,当咱们setoffscreenpagelimit(0)
时,若是细心的话,就会发现,并非只保存当前页面,而是两边的页面同时也有保存。这时候,咱们怀着疑问去阅读源码,才会发现,这个方法居然是这样写的:java
/** * Set the number of pages that should be retained to either side of the * current page in the view hierarchy in an idle state. Pages beyond this * limit will be recreated from the adapter when needed. * * <p>This is offered as an optimization. If you know in advance the number * of pages you will need to support or have lazy-loading mechanisms in place * on your pages, tweaking this setting can have benefits in perceived smoothness * of paging animations and interaction. If you have a small number of pages (3-4) * that you can keep active all at once, less time will be spent in layout for * newly created view subtrees as the user pages back and forth.</p> * * <p>You should keep this limit low, especially if your pages have complex layouts. * This setting defaults to 1.</p> * * @param limit How many pages will be kept offscreen in an idle state. */ 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(); } }
这个方法的默认值居然是1。
这样子,当咱们只想初始化一个页面的时候,就要注意了。这个时候,我采用的是懒加载的方式,由于在页面进入前台的时候,是会调用setUserVisibleHint()
这个方法的,经过这个方法咱们能够得到当前当前页面是否对用户可见,并在对用户可见的时候进行初始化,这时还要注意一点,那就是setUserVisibleHint()
这个方法的调用并不保证View等须要的东西是否已经初始化成功,因此咱们仍是要判断一下的。less