2

我有一个活动,其中我有几个片段。

对于保留实例属性,片段全部设置为 false,这意味着它们在屏幕方向更改时被销毁。(另外,它们不在后堆栈中)

当我改变屏幕方向时,我观察到片段被破坏并重新创建,这是预期的。

我没想到的是 - 在重新创建活动期间通过活动重新附加这些片段。我在 Activity 的 onCreate 方法中有一个空检查,它确定片段是否存在,并根据这个决定添加或附加它。

现在,如果所有片段都被删除/销毁,片段如何附加到活动的 onCreate 中。既然被破坏了就不应该添加吗?

我怀疑 Activity 的 onCreate 的 super.onCreate(savedInstanceState) 在这里再次加载了片段。

有任何想法吗?

4

1 回答 1

0

这似乎与以下内容重复: Android Fragment 生命周期超过方向更改

上面的简短回答:“当发生配置更改时,旧的 Fragment 不会被破坏——它会在重新创建时将自身添加回 Activity。这在大多数情况下是一个巨大的痛苦。”

“为了确保一致的用户体验,当 Activity 由于配置更改而重新启动时,Android 会保留 Fragment 布局和关联的返回堆栈。” (Reto Meier 书第 124 页)

不要在方法中调用 super.onSaveInstanceState():这很可能会破坏活动生命周期,在这个已经相当混乱的过程中引入更多潜在问题。查看 FragmentActivity 的源代码:它在那里保存了所有 Fragment 的状态。– 布赖恩 2013 年 1 月 15 日在 10:08

于 2014-06-14T00:20:33.440 回答