要点:
1、viewpager显示fragment的时,会将当前页、前页、后页的fragment生命周期执行一次。
这很容易理解,切换但未完全切换结束时我们可以看到下一个页面的布局,所以肯定是被预先缓存了。
2、设置viewpager.setOffscreenPageLimit(int)可以设置缓存数量,这样可以使得已经创建的页面不被销毁。猜测该值默认为3,这样只缓存当前、前、后共3个页面。
3、Fragment可以设置在其对用户可见时才加载数据,详见:Andriod开发技巧——Fragment的懒加载
如果是与ViewPager一起使用,用FragmentAdapter来控制显示的话,在Fragment的setUserVisibleHint方法中实现数据的加载判断,若可见则加载数据(firstIn);如果是通过FragmentTransaction的show和hide的方法来控制显示的放在,在Fragment.onHiddenChanged中判断。
我之前加载数据是放在Fragment.onStart()。这样在结合ViewPager使用时,根据要点1可知:若Fragment1 2 3都有加载数据,我在切换到2时,1和3的都启动onStart()加载了一次数据。所以结合要点3解决。