【问题标题】:Save state of dynamic ViewPager保存动态 ViewPager 的状态
【发布时间】:2015-09-15 07:04:00
【问题描述】:

我有一个 android 应用程序,我想在运行时向 ViewPager 动态添加和删除 Fragments,并在配置更改时保留 Fragments。

到目前为止,我已经实现了一个 FragmentStatePagerAdapter,将我的 Fragment 保存在一个列表中,使用方法 addremovereplace 来操作我的 Fragments。基本上,他们所做的只是在列表中插入或删除一个片段,然后调用notifyDatasetChanged()。我在 Activity onCreate() 方法期间将凝视的 Fragment 作为新的 Fragment 插入。

我知道想在配置更改期间保留我的片段。目前,当我更改屏幕方向时,我当前的所有 Fragment 都会被删除,然后我会回到起始 Fragment,这自然是因为重新创建了 Activity,并且在 onCreate() 调用期间重新实例化了 Fragment 和 Adapater。我试图在活动onPause() 期间使用Adapter.saveInstance() 保存适配器的状态,但是当我尝试通过Adapter.restoreInstance() 恢复它时,我得到一个空适配器。

谁能给我一个提示,告诉我在 Android 中保存状态 FragmentStatePagerAdapter 的正确方法是什么?

【问题讨论】:

    标签: android android-fragments savestate


    【解决方案1】:

    要保存 当前 片段的状态,我认为首先您必须检查容器活动中当前添加/可见的片段。获得该片段后,只需使用容器活动的 onSaveInstanceState() 方法来保存当前片段的实例。

    代码 sn-p 请关注this 链接。

    【讨论】:

    • 谢谢,这正是我想要的。我不得不将它放入 for() 循环中以将所有片段保存在我的适配器中,但它似乎按预期工作
    • 这实际上只适用于有限数量的片段。当我想保存当前片段超过 1 个屏幕的片段时,我收到“片段不在 FragmentManager 中”错误。有什么提示吗?
    • 在 onSaveInstanceState() 中,您将只保存当前附加/对用户可见的片段。因此,下次当用户在屏幕旋转上重新创建活动时,他将返回到上次可见的同一片段。因此,一次您的容器活动中只有一个可见片段
    • 但我需要在 ViewPager 中重新创建 所有 片段
    • 我能想到的一个解决方案是,您将当前视图寻呼机片段的位置保存在 onSaveInstanceState() 中,一旦重新创建活动,您就可以像您一样填充视图寻呼机,并且然后将其设置为您在 onSaveInstanceState() 中保存的位置。
    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多