Android Fragment 和 Activity 在方向更改时的行为

Posted

技术标签:

【中文标题】Android Fragment 和 Activity 在方向更改时的行为【英文标题】:Android Fragment & Activity behaivour on orientation change 【发布时间】:2013-08-16 02:34:15 【问题描述】:

我有一个 Activity,其中有几个片段。

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

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

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

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

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

有什么想法吗?

【问题讨论】:

Fragments的状态你保存了吗?? 除非您为您的活动发布代码,否则很难仅从您的描述中判断发生了什么。 我没有显式保存它们的状态,但正如我所提到的,系统可能会在 onSaveInstance..() 方法中隐式保存活动的状态(因此它是片段),就在它杀死活动和在重新创建期间重新加载。 代码真的很难放在一个简单的sn-p中。顺便说一句,我找到了一个关于我的问题的线程; ***.com/questions/8474104/… 【参考方案1】:

这似乎与以下内容重复: android Fragment lifecycle over orientation changes

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

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

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

【讨论】:

以上是关于Android Fragment 和 Activity 在方向更改时的行为的主要内容,如果未能解决你的问题,请参考以下文章

Fragment与Activity简单使用,包括二者之间的关联与生命周期

Fragment基础----生命周期

Fragment 工具类

Fragment 工具类

android logcat中不显示log.d我的程序代码中包含Log.d(TAG,"activi

自定义控件实现-今日头条图集效果