Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在配置更改后恢复片段的对象引用_Android_Android Fragments - Fatal编程技术网

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

Android 在配置更改后恢复片段的对象引用,android,android-fragments,Android,Android Fragments,我的活动中有一个复杂的数据对象。当用户想要编辑该对象的数据时,会显示一个类似浮动对话框的片段。此片段引用了数据对象的某些部分。用户对此片段中的数据进行实时编辑。例如,一些简单的文本编辑 当用户编辑此数据时,会发生配置更改(著名的方向更改)。一旦发生更改,系统将自动重新创建所有内容,包括浮动片段,就像以前一样 我不知道为什么,Android应该重新启动Activty,为什么要保存并重新加载之后手动创建的东西?但这是另一个问题 所以,当fragment的新克隆回来时,它已经失去了与数据对象的“连接”

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

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

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

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

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

  • 然后,如何重新建立片段与 数据对象,以便用户可以继续进行编辑 发生了什么


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

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