gpt4 book ai didi

android - 使用 onSaveInstanceState 保存列表数据对象

转载 作者:行者123 更新时间:2023-11-30 03:23:20 25 4
gpt4 key购买 nike

我有一个应用程序,它有一个主要的 Activity 可以交换许多 Fragment。好吧,无论你在哪个 Fragment 上,在低内存杀死 Activity 并且你尝试返回到应用程序后,它都会引导你回到“开始” Activity 首先调用的 Fragment。 (注:几乎所有这些其实都是ListFragment的)

所以这是我的问题:

我应该在每个 fragment 中使用 onSaveInstanceState() 吗?如果是这样,我是将数据保存在 fragment 中还是 fragment 本身?还是在 Main Activity 中只使用一次 onSaveInstanceState()。 (如果这甚至是要采取的类(class))

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

最佳答案

答案在很大程度上取决于您如何管理 fragment 。

我假设您没有使用 Fragment backstack,并且您已经在每个 Fragment 上调用了 setRetainInstance(true)。

附加 fragment 时需要使用标签。

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

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

针对问题/评论进行编辑:

  • activty.getFragmentManager().findFragmentByTag(标签);找到一个现有 fragment
  • 在 Fragment 事务中:add(fragment, tag)、replace(id, fragment, tag) 等让您指定标签。您还可以使用属性将其放入布局文件中
    • class=".myFrag$tag"

当您使用 setRetainInstance 时,包括其内容在内的实际 fragment 对象仍然存在。

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

最后,您可以通过调用 FragmentManager 的 saveFragmentInstanceState 简单地让 fragment 自行保存,但我在正确使用它时遇到了问题。

关于android - 使用 onSaveInstanceState 保存列表数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com