避免Android在方向更改时自动重新添加我的片段

Posted

技术标签:

【中文标题】避免Android在方向更改时自动重新添加我的片段【英文标题】:Avoid Android automatically re-add my fragment on orientation change 【发布时间】:2011-07-17 18:12:05 【问题描述】:

我有一个ListFragment,它依赖于托管Activity 来正确初始化。第一次运行时,它加载正常。一旦我改变方向,我的应用程序就会崩溃。从堆栈跟踪中我可以看到不是我试图过早地添加Fragment,而是android 试图恢复Fragment

我在onStart 方法中设置了setRetainInstance(false),但是一旦方向改变,我找不到任何方法来禁用Fragment 的恢复。有任何想法吗?我是否需要在我的应用被销毁之前删除Fragment

编辑:我最终延迟了初始化列表,直到 Activity 准备好。在设置适配器之前,Android 会方便地显示“正在加载”消息。

【问题讨论】:

【参考方案1】:

我最终延迟了初始化列表,直到 Activity 准备好。在设置适配器之前,Android 会方便地显示“正在加载”消息。

【讨论】:

【参考方案2】:

我有一个 ListFragment,它依赖于托管 Activity 来正确初始化。

这可能是你的困难所在。

从堆栈跟踪中我可以看出不是我试图过早添加 Fragment,而是 Android 试图恢复 Fragment。

正确。

有什么想法吗?

我会专注于正确处理配置更改。在片段中的onSaveInstanceState()onRetainNonConfigurationInstance()getLastNonConfigurationInstance()(在Activity 上)和onAttach()(在你的Fragment 上)的组合之间,您应该能够传递旧片段中的任何内容到新的没有崩溃。对于配置更改,不要依赖“宿主 Activity 正确初始化”。

【讨论】:

Activity 已经优雅地处理了方向变化。 Fragment 依赖于 Activity,因为 Activity 绑定到 Service 并从那里获取信息,供 Fragment 使用。你的建议似乎没有冒犯的意思,相当笨拙。除非有其他想法,否则我可能会在调用 OnDestroy 之前的某个阶段删除 Fragment。 @Al:“方向变化已经被 Activity 优雅地处理了。” - 显然不是,否则你不会发布这个问题。 “Fragment 依赖于 Activity,因为 Activity 绑定到 Service 并从那里获取信息,这些信息由 Fragment 使用。” - 所以? “你的建议似乎没有冒犯的意思,相当笨拙。” - 我会对您当前的实施说同样的话。正如他们所说,美丽在旁观者的眼中。

以上是关于避免Android在方向更改时自动重新添加我的片段的主要内容,如果未能解决你的问题,请参考以下文章

android片段在方向更改时创建了两次

片段标签的使用

Android Fragment 创建了两次方向更改

如何防止在方向更改时重新创建片段寻呼机中的片段?

在片段中在运行时更改方向时更改布局而不重新创建视图

重叠DialogFragment,在方向更改时以错误的顺序重新创建