3

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

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

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

因此,虽然片段的新克隆又回来了,但它已经失去了与数据对象的“连接”。因为那个数据对象也消失了,我们有一个新的,所有用户编辑都丢失了。我想在配置更改之前保存状态并在之后重新获得它。

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

  2. 之后,如何重新建立片段与数据对象的连接,以便用户可以像什么都没发生一样继续编辑?

4

1 回答 1

1

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

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