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

时间:2017-06-08 08:21:22

标签: android android-fragments back-stack fragment-backstack

我的项目中有五个不同的片段,我们称之为A ...... E。 A和B仅在用户打开应用程序时可见。那些负责显示加载屏幕(检查当前登录会话)和登录屏幕本身。片段C是该应用程序的主屏幕,用户可以使用该屏幕到达应用程序的其他区域。正因为如此,在创建/提交事务时,片段D和E得到了“addToBackStack(String)”额外的内容。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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();
}