我有一个应用程序,其中有一个主Activity
交换了许多Fragment
个。{好吧,你所处的Fragment
是什么并不重要,在低内存杀死Activity
并且你试图返回应用程序之后,它会引导你回到“开始”Fragment
那个Activity
第一次打电话。 (注意:几乎所有这些实际上都是ListFragment
)
以下是我的问题:
我应该在每个片段中使用onSaveInstanceState()
吗?如果是这样,我是否将数据保存在片段或片段本身中?或者您只在主onSaveInstanceState()
中使用Activity
一次。 (如果这是采取的方针)
注意:我有setRetainInstance(true)
但我认为我没有正确处理,如果这是解决方案。这些都是onActivityCreated()
的最后一行。
答案 0 :(得分:1)
答案很大程度上取决于你如何管理片段。
我假设你没有使用Fragment backstack,并且你在EACH片段上调用了setRetainInstance(true)。
附加片段时需要使用标记。
在Activity#onSaveInstanceState()中,您需要记住哪些片段是可见的。
在Activity#onCreate中,您需要为每个片段找到标签的现有片段,然后创建您找不到的任何片段的新实例。现在,您可以使用保存的实例状态中的信息使相应的片段可见(根据代码管理片段的方式,根据需要显示或添加或替换。)
编辑以回答问题/评论:
使用setRetainInstance时,实际的片段对象及其内容仍然存在。
注意:如果您不想使用标记,您还可以使用片段管理器的putFragment / getFragment方法将片段放入实例状态包中。
最后你可以通过调用FragmentManager的saveFragmentInstanceState来让片段保存自己,但是我在使用它时遇到了麻烦。