使用onSaveInstanceState保存列表数据对象

时间:2013-09-10 16:12:05

标签: android android-fragments android-activity android-lifecycle

我有一个应用程序,其中有一个主Activity交换了许多Fragment个。{好吧,你所处的Fragment是什么并不重要,在低内存杀死Activity并且你试图返回应用程序之后,它会引导你回到“开始”Fragment那个Activity第一次打电话。 (注意:几乎所有这些实际上都是ListFragment

以下是我的问题:

我应该在每个片段中使用onSaveInstanceState()吗?如果是这样,我是否将数据保存在片段或片段本身中?或者您只在主onSaveInstanceState()中使用Activity一次。 (如果这是采取的方针)

注意:我有setRetainInstance(true)但我认为我没有正确处理,如果这是解决方案。这些都是onActivityCreated()的最后一行。

1 个答案:

答案 0 :(得分:1)

答案很大程度上取决于你如何管理片段。

我假设你没有使用Fragment backstack,并且你在EACH片段上调用了setRetainInstance(true)。

附加片段时需要使用标记。

在Activity#onSaveInstanceState()中,您需要记住哪些片段是可见的。

在Activity#onCreate中,您需要为每个片段找到标签的现有片段,然后创建您找不到的任何片段的新实例。现在,您可以使用保存的实例状态中的信息使相应的片段可见(根据代码管理片段的方式,根据需要显示或添加或替换。)

编辑以回答问题/评论:

  • activty.getFragmentManager()findFragmentByTag(标签)。找到现有片段
  • 片段事务中的
  • :添加(片段,标记),替换(id,片段,标记)等,让您指定标记。您也可以使用该属性将其放在布局文件中
    • 类= “myFrag $标签”

使用setRetainInstance时,实际的片段对象及其内容仍然存在。

注意:如果您不想使用标记,您还可以使用片段管理器的putFragment / getFragment方法将片段放入实例状态包中。

最后你可以通过调用FragmentManager的saveFragmentInstanceState来让片段保存自己,但是我在使用它时遇到了麻烦。