从双窗格模式到单窗格模式的方向更改异常
Exception on orientation change from two-pane mode to one-pane mode
我有一个支持智能手机和平板电脑的演示应用程序。
还支持方向改变。
在平板电脑上有一个面板和两个面板模式。两个窗格模式仅适用于横向模式。所有 UI 都暴露在碎片中。
UI 双窗格模式是常见的主从模式:左侧是列表,右侧是详细信息屏幕。
其他的都是横向模式下的平板电脑。
场景:
- 运行 横向模式下平板电脑上的应用程序
- Select 左侧的文章(在第二个窗格中,默认片段将被替换为带有文章详细信息的片段)
- 改变方向
- 出现异常
我面临的问题是当方向发生变化时我收到一个异常。错误消息报告没有带有 id 详细信息的 FrameLayout - 这个与布局相关,应该只为 layout-sw600dp-land
显示。对于纵向模式,还有另一种布局 layout-sw600dp-port
业务逻辑明确检查当前模式,在 R.id.details
的 FragmentManager
内没有任何操作
public void show() {
if (isTwoPaneMode()) {
showMain();
showDetailed();
} else {
showMain();
}
}
这让我想到在这个 R.id.details
上是否有任何隐藏的事务不存在这个用例?
问题出在详细片段的 setRetainInstance(true) 中(由于重构而遗漏)。
当它被删除时,一切都开始正常工作。
我有一个支持智能手机和平板电脑的演示应用程序。
还支持方向改变。
在平板电脑上有一个面板和两个面板模式。两个窗格模式仅适用于横向模式。所有 UI 都暴露在碎片中。
UI 双窗格模式是常见的主从模式:左侧是列表,右侧是详细信息屏幕。
其他的都是横向模式下的平板电脑。
场景:
- 运行 横向模式下平板电脑上的应用程序
- Select 左侧的文章(在第二个窗格中,默认片段将被替换为带有文章详细信息的片段)
- 改变方向
- 出现异常
我面临的问题是当方向发生变化时我收到一个异常。错误消息报告没有带有 id 详细信息的 FrameLayout - 这个与布局相关,应该只为 layout-sw600dp-land
显示。对于纵向模式,还有另一种布局 layout-sw600dp-port
业务逻辑明确检查当前模式,在 R.id.details
FragmentManager
内没有任何操作
public void show() {
if (isTwoPaneMode()) {
showMain();
showDetailed();
} else {
showMain();
}
}
这让我想到在这个 R.id.details
上是否有任何隐藏的事务不存在这个用例?
问题出在详细片段的 setRetainInstance(true) 中(由于重构而遗漏)。
当它被删除时,一切都开始正常工作。