分离片段不会触发onSaveInstanceState()

时间:2012-08-27 17:41:32

标签: android save fragment detach

我的Android应用有一个ActionBar,可以更改Fragment占用某个FrameLayout的内容。我正在尝试使用onSaveInstanceState在更改选项卡时保存片段的状态,以便可以在onCreateView中恢复。

问题是,onSaveInstanceState永远不会被调用。调用Fragment的{​​{1}}和onDestroyView方法,但提供给onCreateView的{​​{1}}仍然为空。

有人可以在实际调用Bundle时向我解释,如何确保在切换标签时调用它,或者保存和恢复onCreateView的状态时的最佳做法分离并重新连接?

片段:

onSaveInstanceState

的活动:

Fragment

1 个答案:

答案 0 :(得分:8)

Fragment#onSaveInstanceState仅在托管Activity的{​​{1}}被销毁且有可能返回相同活动并且片段仍添加到{{}}时调用{1}}。最常见的情况是屏幕旋转。

我认为您的Fragment也需要在FragmentManagersetRetainInstance(true)进行操作。虽然不太确定这一点。

例如,按下主页按钮时,您还应该看到调用此方法。这将破坏活动,但您可以通过使用任务列表返回到它。

如果您只是Fragment片段,那么您需要做的就是向onCreate询问它。

您应该看一下两个例子:

ActionBar FragmentTabsTabHost FragmentTabs

detach()示例使用

FragmentManager

查找以前添加的TabHost的实例,直到您ft.add(containerId, fragment, tag); // later fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag); Fragment

为止

关于remove() / Fragment:一旦片段被分离,就会调用它,因为下次附加它时需要创建一个新的onCreateView。请注意,当您onDestroyView片段时,View不会被调用,因为它仍然附加到Fragment#onDetached()。它只与视图层次结构分离。


还有另一个很好的例子,说明如何在Android培训中保留片段状态/如何使用片段来保留状态 - Caching Bitmaps

这个例子虽然缺少一条关键线:

detach()