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



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

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

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

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

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

  2. 之后,如何重新建立碎片与数据对象,以便用户可以继续进行前所未有的编辑发生了什么?

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

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

相关内容

最新更新