从双窗格模式到单窗格模式的方向更改异常

Exception on orientation change from two-pane mode to one-pane mode

我有一个支持智能手机和平板电脑的演示应用程序。

还支持方向改变。

在平板电脑上有一个面板和两个面板模式。两个窗格模式仅适用于横向模式。所有 UI 都暴露在碎片中。

UI 双窗格模式是常见的主从模式:左侧是列表,右侧是详细信息屏幕。

其他的都是横向模式下的平板电脑。

场景:

  1. 运行 横向模式下平板电脑上的应用程序
  2. Select 左侧的文章(在第二个窗格中,默认片段将被替换为带有文章详细信息的片段)
  3. 改变方向
  4. 出现异常

我面临的问题是当方向发生变化时我收到一个异常。错误消息报告没有带有 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) 中(由于重构而遗漏)。

当它被删除时,一切都开始正常工作。