当 Android 使用嵌套片段和 getSupportFragmentManager() 在方向更改时重新创建我的应用程序时究竟发生了什么?
What exactly happens when Android recreates my app on an orientation change using nested fragments and getSupportFragmentManager()?
我查看了与此问题相关的其他线程,它们似乎都使用了 getChildFragmentManager(),但如果可能的话,我想使用 getSupportFragmentManager()。
这是问题所在:
我有包含子片段 B 的父片段 A。B 是一个选择器片段。当用户进行选择时,B 与 C 是 "replaced"。所以现在 A 持有 C。用户也可以返回 B 并打开一个显示其他数据的 C,我们将其称为 C'。当用户返回时,它是一个 "replace" 事务(不是返回堆栈)。此外,C 和 C' 是同一片段的不同实例 class.
这在大多数情况下工作正常,但我发现了一个导致异常行为的场景。
用户以纵向开始,B 显示
纵向用户,选择C
用户切换到横向
横向用户,C显示
用户切换回纵向
纵向用户,C显示
纵向用户,returns到B
protrait中的用户,选择C'
用户切换到横向
横向用户,C'显示
用户切换回纵向
用户竖屏,B显示Huh?!
在#12,C' 应该仍然显示,而不是 B(选择器片段)。为什么 Android 不记得这里的 C'? 当 Android 使用嵌套片段和 getSupportFragmentManager() 在方向更改时重新创建我的应用程序时究竟发生了什么?
我认为这可能与使用容器 ID 和标签引用由 getSupportFragmentManager() 管理的片段之间的区别有关。如果我使用容器 ID,这会不会因为 xml 文件正在交换(即使容器 ID 名称没有改变)而在方向更改时搞砸了。希望这是有道理的。我正在使用容器 ID 顺便说一句。
一些其他背景信息:在这种特定情况下我根本没有使用返回堆栈。当我更改片段时,我正在使用 "replace" 事务和 "new" 保留字并创建一个新的嵌套片段。
此外,这里有一张图片可以帮助您更好地理解 A、B、C、C' 是什么:
这个问题与我调用 super.onCreate(savedInstanceState) 的事实有关,它在方向更改时维护旧片段并同时创建新片段。没有意识到 super.onCreate(savedInstanceState) 做到了。
我查看了与此问题相关的其他线程,它们似乎都使用了 getChildFragmentManager(),但如果可能的话,我想使用 getSupportFragmentManager()。
这是问题所在: 我有包含子片段 B 的父片段 A。B 是一个选择器片段。当用户进行选择时,B 与 C 是 "replaced"。所以现在 A 持有 C。用户也可以返回 B 并打开一个显示其他数据的 C,我们将其称为 C'。当用户返回时,它是一个 "replace" 事务(不是返回堆栈)。此外,C 和 C' 是同一片段的不同实例 class.
这在大多数情况下工作正常,但我发现了一个导致异常行为的场景。
用户以纵向开始,B 显示
纵向用户,选择C
用户切换到横向
横向用户,C显示
用户切换回纵向
纵向用户,C显示
纵向用户,returns到B
protrait中的用户,选择C'
用户切换到横向
横向用户,C'显示
用户切换回纵向
用户竖屏,B显示Huh?!
在#12,C' 应该仍然显示,而不是 B(选择器片段)。为什么 Android 不记得这里的 C'? 当 Android 使用嵌套片段和 getSupportFragmentManager() 在方向更改时重新创建我的应用程序时究竟发生了什么?
我认为这可能与使用容器 ID 和标签引用由 getSupportFragmentManager() 管理的片段之间的区别有关。如果我使用容器 ID,这会不会因为 xml 文件正在交换(即使容器 ID 名称没有改变)而在方向更改时搞砸了。希望这是有道理的。我正在使用容器 ID 顺便说一句。
一些其他背景信息:在这种特定情况下我根本没有使用返回堆栈。当我更改片段时,我正在使用 "replace" 事务和 "new" 保留字并创建一个新的嵌套片段。
此外,这里有一张图片可以帮助您更好地理解 A、B、C、C' 是什么:
这个问题与我调用 super.onCreate(savedInstanceState) 的事实有关,它在方向更改时维护旧片段并同时创建新片段。没有意识到 super.onCreate(savedInstanceState) 做到了。