【问题标题】:Fragments in ViewPager get recreatedViewPager 中的片段被重新创建
【发布时间】:2013-02-21 04:28:00
【问题描述】:

我有一个带有容器的FragmentActivity,我将FragmentViewPager 放在其中。在ViewPager 我有 3 个Fragments:

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

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

[MainActivity]
    [OtherFragment]

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

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

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

【问题讨论】:

    标签: android android-fragments android-viewpager fragment


    【解决方案1】:

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

    mViewPager.setOffscreenPageLimit(3);

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

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

    【讨论】:

    • 当系统资源不足时,您可能会遇到问题。片段中的某些视图或片段本身将被拆除,以便将这些资源用于其他地方。
    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多