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

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

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

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

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

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

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

有什么想法吗?

【问题讨论】:

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

标签: android android-activity fragment


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多