Android - 片段返回堆栈导致白屏

Android - fragment back stack resulting into white screen

我的项目中有五个不同的片段,我们称它们为 A...E。 A 和 B 只有在用户打开应用程序时才可见。这些负责显示加载屏幕(检查当前登录会话)和登录屏幕本身。片段 C 是该应用程序的主屏幕,用户可以使用它来访问应用程序的其他区域。因此,片段 D 和 E 在交易 created/commited.

时得到了额外的 "addToBackStack(String)"

导致黑屏的问题是当用户打开 D 或 E 并再次返回 C 时。此操作可能导致第一次 C 的空白屏幕或多次重做该步骤。

相关片段 C、D、E 正在使用视图持有者、数据绑定和回收器视图。每个回收器视图都有多种视图类型。

C 的 onBackPressed 似乎正确执行,但 C 已从缓存或类似的东西中删除。

希望有人能帮我解决这个问题。

我找到了可能解决我的问题的方法。仍然需要进一步测试,但到目前为止它似乎有效:

private void showFragment(Fragment fragment, String tag, String backStackTag) {
    FragmentTransaction ft = fragmentManager.beginTransaction();

    if (backStackTag != null) {
        ft.addToBackStack(backStackTag);
    }

    switch (tag) {
        case "A":
        case "B":
            ft.replace(containerId, fragment, tag);
            break;
        case "C": {
            Fragment main = fragmentManager.findFragmentByTag("C");
            if (main != null) {
                ft.show(main);
            } else {
                ft.replace(containerId, fragment, tag);
            }
            break;
        }
        case "D":
        case "E": {
            Fragment main = fragmentManager.findFragmentByTag("C");
            ft.hide(main);
            ft.add(containerId, fragment, tag);
            break;
        }
        default:
            ft.add(containerId, fragment, tag);
            break;
    }

    ft.commit();
}