首页 > 解决方案 > 从两窗格模式到单窗格模式的方向更改异常

问题描述

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

它还支持方向更改。

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

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

在横向模式下,其余所有内容都与平板电脑有关。

场景:

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

我面临的问题是当方向改变发生时我收到一个异常。错误消息报告没有带有 id 详细信息的 FrameLayout - 这与布局有关,应该只显示layout-sw600dp-land. 对于纵向模式,还有另一种布局layout-sw600dp-port

FragmentManager业务逻辑明确检查当前模式, on内没有操作R.id.details

public void show() {
    if (isTwoPaneMode()) {
        showMain();
        showDetailed();
    } else {
        showMain();
    }
}

它让我想到R.id.details这个用例是否存在任何不存在的隐藏事务?

标签: androidscreen-orientation

解决方案


问题出在详细片段中的 setRetainInstance(true) 中(由于重构而丢失)。

当它被删除时,一切都开始运作良好。


推荐阅读