6

我有一个FragmentActivitywith 容器,我把Fragmentwith放在那里ViewPager。在ViewPager我有 3Fragment秒:

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

当用户单击Fragment1//上的按钮Fragment2Fragment3,我将其替换为ViewPagerFragmentOtherFragment因此层次结构如下所示:

[MainActivity]
    [OtherFragment]

当我点击Back按钮时,ViewPagerFragment会重新创建,以及它的嵌套Fragments ( Fragment1/ Fragment2/ Fragment3)。

有没有办法保存状态ViewPagerFragment及其嵌套片段?这样片段将保持其状态而不被重新创建?

我已经设置setRetainInstance(true)ViewPagerFragment,但是好像没有生效。

4

1 回答 1

18

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

mViewPager.setOffscreenPageLimit(3);

ViewPager 非常热衷于关闭它当前不使用的东西,而这正是这里发生的事情。ViewPager 的默认行为是“保留”正在查看的页面两侧的一个页面,并销毁其余页面。因此在您的3页视图中,在选择第1页时会被销毁,然后重新选择Page 2时,重新选择Page 2。正如您所注意到的,第 2 页只调用了一次 onCreate(..),因为它始终与当前选定的页面相邻,或者说是当前选定的页面。

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

于 2013-08-30T20:38:33.840 回答