Android - Honeycomb - Action Bar标签片段保存/恢复状态

5
在文档中提到,当使用操作栏与选项卡时,请确保保存片段的状态,以便在切换选项卡时,片段看起来与之前相同。这应该如何完成?在处理选项卡的示例中,当切换选项卡时不会调用 onSavedInstanceState,那么我应该在哪里保存状态?我是在活动级别上执行此操作吗?我只希望状态是短暂的。
谢谢
2个回答

1

Fragment.onSaveInstanceState() 是合适的位置。当需要保存状态时,它将被调用。如果没有被调用,那么它还不需要被保存。


对我来说这不起作用。如果您使用处理选项卡的示例方式,则片段管理器将在取消选择选项卡时删除片段,并在选择选项卡时添加片段。如果您有一个ListFragment,当您返回到其选项卡时,它甚至不记得您在列表中的位置。在3.0之前,如果你在选项卡中有活动,系统会记住它们的状态。我正在尝试在HC中做同样的事情,但onSavedInstanceState没有被调用。 - Nic
3
只有当片段完全被移除时,才会调用 onSaveInstanceState 状态。例如,如果更改屏幕方向。如果你想在选项卡从布局中移除的同时保存某些东西,请覆盖所选选项卡中显示的片段中的 onPause 方法。 - Janusz
如果我在onPause中存储Bundle,如何让更新后的Bundle通过onActivityCreated快速传递?因为Fragment还处于活动状态,所以我无法调用setArgument方法。 - Sameer Segal
当您稍后创建时,您可以在 onSaveInstanceState() 中存储您的内容,以便获取它。如果您的片段不会被重新创建,则相同的对象将存在,因此您可以直接使用成员变量。 - hackbod
在最小 Android API 支持到 12 级之间切换选项卡时,恢复 Fragment 状态的正确方式是什么?由于平台 v3.1 并没有 FragmentTransaction.Atach/Detach fragments 这样的方法,因此应该如何处理呢?当切换选项卡时 onSaveInstanceState() 方法不会被调用。 - Arvis

0

我遇到了完全相同的问题,并想出了一个解决方案,感觉有些冗余(我认为这个功能将来会更好地工作),但它确实有效。解决方案是通过活动手动管理状态束。

保存状态:在每个片段中,实现一个名为 getState() 的函数,该函数将返回包含片段想要保存的任何状态数据的捆绑包。然后,活动应在从视图中删除片段之前调用该函数。

恢复状态:在片段中实现一个方法或构造函数,接受之前保存的相同捆绑包,并解压缩捆绑包以便根据片段的需要使用。当活动将片段重新添加到视图中时,传递先前提供的捆绑包,然后您就可以开始了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接