您的位置:首页 > 移动开发 > Android开发

android解决fragment+viewpager状态保存问题

2015-06-06 10:15 513 查看
之前做的一个项目,里面有用到fragment,于是我就用了fragmentActivity+fragment的方法,加上RadioGroup进行页面的切换。当时写的时候,感觉没有什么问题,后来,用了很多手机进行测试。发现内存小的手机会出现叠影,特别是当此应用在后台运行了比较长的时间,再切出来,就会出现很严重的叠影。没办法,智能更改架构了。

这种fragment+fragment的方法,如果用的是系统自带的fragment不会有问题,但是我们要保证向下兼容,于是必须要用v4包,但是v4包会在创建fragment时自动添加一个布局节点,于是会创建双倍的布局出来,这就大大损耗了系统内存,所以出现叠影也就不足为奇了。

所以,我就抛弃了这种fragment+fragment的方法,选用viewpager+fragment方法。这种方法比较简单,将fragment放入一个list中,加上一般的viewpager用法,setadapter(FragmentPagerAdapter)就行了。同时如果想要禁用滑屏的话就把touch事件截断就好了。

但是用这个方法,会发现如果你的fragment页面多于两个页面,就会发现每次切换都在刷新页面,你的状态根本不会保存。这个时候就要打开viewpager的源码看一看了。里面有一个private static final int DEFAULT_OFFSCREEN_PAGES = 1;(默认的加载页面,ViewPager是1,所以会加载两个Fragment)如果你有多个viewpager而且状态都需要保存,那就把这个值改成你的fragment的个数了。可是这里是一个private static 不能改。所以,我们就写一个自己的viewpager继承自viewgroup,然后把viewpager里面的代码复制进去,把刚才那个常量改成fragment的个数就行了。这样可能会导致加载的页面过多了,所以适用于fragment比较少的状态。

后面我会给你们一个我的示例代码,编译器是android studio.里面的lazyViewPager就是自定义的viewpager,而customViewPager就是继承了lazyViewPager类解决了禁用滑屏的需求。图片都是借鉴的……不要在意。我就不贴代码了。下面奉上链接,希望多多交流。

网盘地址:http://pan.baidu.com/s/1ub4lg
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: