解决fragment与viewpager一起使用时fragment中的listview数据出现重复
2016-05-17 16:32
323 查看
转载地址:http://my.oschina.net/buobao/blog/644699?fromerr=OnaCVQp7
activity中需要显示一个切换页显示3个不同的视图数据,这里需要使用viewpager+fragment实现切换。在fragment中需要在onstart或者onresume中初始化加载数据。但是viewpager在切换fragment时会调用下一个fragment的多个回调,比如:
在加载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切换时没有重新调用以上的回调函数。
ps:我们在使用viewpager时会定义一个适配器adapter,其中实例化了一个fragment列表,所以在tab切换时fragment都是已经实例化好的,所以在切换标签页时是不会重新实例化fragment对象的,因而在fragment中定义的成员变量是不会被重置的。所以为列表初始化数据需要注意这个问题
activity中需要显示一个切换页显示3个不同的视图数据,这里需要使用viewpager+fragment实现切换。在fragment中需要在onstart或者onresume中初始化加载数据。但是viewpager在切换fragment时会调用下一个fragment的多个回调,比如:
在加载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切换时没有重新调用以上的回调函数。
ps:我们在使用viewpager时会定义一个适配器adapter,其中实例化了一个fragment列表,所以在tab切换时fragment都是已经实例化好的,所以在切换标签页时是不会重新实例化fragment对象的,因而在fragment中定义的成员变量是不会被重置的。所以为列表初始化数据需要注意这个问题
相关文章推荐
- C# TOKEN的保存与验证
- ArrayAdapter,SimpleAdapter
- 安装ubuntu-server16.0,设置WiFi
- 二分查找算法的应用
- svn cleanup failed–previous operation has not finished
- Codeforces 84A:Toy Army
- java学习笔记
- Linux终端下 dstat 监控工具
- iOS APP ipa打包
- python 多线程就这么简单(续)+跟着前一篇
- 【bzoj4590】[Shoi2015]自动刷题机
- jquery获取img的src值的简单实例
- Retrofit2.0 android.os.NetworkOnMainThreadException解决方法
- unity 调用安卓系统摄像机和相册并对图片进行裁剪(二)
- HDU 1754 线段树
- poj 3684 Physics Experiment(数学,物理)
- Linux命令扫盲 之 sar
- [Unity实战]自定义mesh
- 手机抓包教程分享
- 网络视频监控系统开发系列-----BMP文件头格式