先来一张碎片Fragment的生命周期图开开胃......
首先呢,我来介绍一下:
当我们使用Viewpager搭配FragmentPagerAdapter进行滑动的时候,某些情况下会发现前边几页自己手动产生的数据会被清空掉,对于这个碎片的滑动:
它的出现和消失只是和Activity一样,是一个是否在栈顶的关系,当非栈顶碎片出现再栈顶的时候,它就会从碎片的onCreateView这个生命周期开始走到onDestroyView之前,如果你把adapter这种装数据的对象放在了onCreateView及以下的生命节点里,当碎片重新回到栈顶之后,adapter一定会被重新创建,所以数据丢失。。。。解决方案就是将adapter的实例化放在onCreate里。
再来谈谈如果将adapter的实例化放在了onCreateView及以下的解决方案:
使用setOffscreenPageLimit来设置ViewPager的预加载页数,可以同样保存数据。这个东西它的作用是预加载下x个页面,当我们预加载的页数x大于等于 总页数-1时,也就是说,在第一次如果就预加载了所有的页面,今后的滑动所有页面的每一个生命周期都不会再走一次,相当于栈顶有多个碎片。。。。当然啦,如果不是所有,随着总有一个以上的碎片被压入栈顶以下,肯定会有数据的丢失,除非你把adapter的初始化重放一下位置。。。。
源码解析(转):http://blog.csdn.net/bob1993_dev/article/details/46491797
时间: 2024-11-05 00:00:19