重新创建ViewPager中的片段

时间:2013-03-06 11:39:10

标签: android android-fragments android-viewpager fragment

我有一个FragmentActivity容器,我将FragmentViewPager放在一起。在ViewPager我有3 Fragment s:

[MainActivity]
    [ViewPagerFragment]
        [Fragment1][Fragment2][Fragment3]

当用户点击Fragment1 / Fragment2 / Fragment3上的按钮时,我将ViewPagerFragment替换为OtherFragment,因此层次结构如下所示:

[MainActivity]
    [OtherFragment]

当我点击返回按钮时,会重新创建ViewPagerFragment,以及其嵌套的Fragment s Fragment1 / Fragment2 / {{ 1}})。

有没有办法保存Fragment3及其嵌套片段的状态?这样碎片会保持状态而不会重新创建?

我为ViewPagerFragment设置了setRetainInstance(true),但似乎没有生效。

1 个答案:

答案 0 :(得分:17)

只需设置: - 其中参数是ViewPager中片段的数量

  

mViewPager.setOffscreenPageLimit(3);

ViewPager非常热衷于关闭目前没有使用的东西,这正是这里发生的事情。默认行为是ViewPager在要查看的页面的任一侧“保持”一页,并销毁其余页面。因此,在您的3页视图中,第3页在选择第1页时会被破坏,然后在重新选择第2页时会重新创建第3页。正如您所注意到的那样,第2页只有onCreate(..)被调用一次,因为它总是与当前选择的页面相邻,或者是当前所选页面。

要解决此问题,只需设置ViewPager.setOffscreenPageLimit(2)即可。然后ViewPager将保留所有碎片。显然这对于​​大量碎片来说不是一个好主意,但对于你的情况来说它应该没问题。