activity中须要显示一个切换页显示3个不一样的视图数据,这里须要使用viewpager+fragment实现切换。在fragment中须要在onstart或者onresume中初始化加载数据。可是viewpager在切换fragment时会调用下一个fragment的多个回调,好比:java
在加载Tab-A时会实例化Tab-B中fragment,依次调用:onAttach、onCreate、onCreateView、onActivityCreated、onStart和onResume。一样切换到Tab-B时也会初始化Tab-C中的fragment。可是fragment中的数据(如读取的服务器数据)没有相应清除,致使重复加载数据。缓存
解决方式:给pager设置一个缓存,服务器
mViewPager.setOffscreenPageLimit(3);
这样在切换fragment时就不会重复加载数据。函数
tab在切换时没用清除fragment中保存的数据能够看出fragment没有被从新建立,可是依次从新调用了以上的回调方法,给pagerview设置缓存量后在tab切换时没有从新调用以上的回调函数。spa
ps:咱们在使用viewpager时会定义一个适配器adapter,其中实例化了一个fragment列表,因此在tab切换时fragment都是已经实例化好的,因此在切换标签页时是不会从新实例化fragment对象的,于是在fragment中定义的成员变量是不会被重置的。因此为列表初始化数据须要注意这个问题。code