配置更改后恢复片段的对象引用

时间:2012-08-24 18:47:29

标签: android android-fragments

我的Activity中有一个复杂的数据对象。当用户想要编辑该对象的数据时,会显示像fragment一样的浮动对话框。该片段引用了数据对象的某些部分。用户通过此片段对该数据进行实时编辑。例如,一些简单的文本编辑。

当用户正在编辑此数据时,会发生配置更改。(着名的Orientation更改)。在更改后,系统会自动重新创建所有内容,包括浮动片段,就像以前一样。

我不知道为什么,Android应该重新启动Activty,为什么要保存并重新加载之后手动创建的内容?但这是另一个问题。

因此,当片段的新克隆返回时,它已经丢失了“ Connection ”到数据对象。因为该数据对象也消失了,我们有一个新的用户编辑丢失了。我想在配置更改之前保存状态,然后重新获得状态。

  1. 活动如何确定用户是否正在启动它 (应该从头开始)或者在配置上由系统重新创建。改变(应该重新加载 保存状态)?

  2. 之后,如何重新建立片段的连接 数据对象,因此用户可以继续编辑任何东西 发生了吗?

1 个答案:

答案 0 :(得分:1)

对于大多数问题,我找到了一些好方法:

  • 似乎保留了使用setArguments()传递给片段的参数。
  • 保证对Fragment方法onAttach()的调用。与父母一起进行数据交换和事件注册。父级可以是Activity或其他Fragment,因此可能需要检查Fragment.getParentFragment()
  • 系统会保留
  • AsyncTaskLoader并自动重新连接。片段的数据获取/处理代码就在这里。
  • 使用自定义数据管理器类,片段不包含对数据对象的引用,而是数字ID,就像在数据库中一样。
  • 可以使用Command对象,而不是直接引用的方法调用。
  • 让Parent Activity将事件从一个Fragment广播到所有子Fragment,它们可以充当独立订阅者。