【问题标题】:Android - fragment back stack resulting into white screenAndroid - 片段返回堆栈导致白屏
【发布时间】:2017-06-08 08:21:22
【问题描述】:

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

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

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

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

希望任何人都可以帮助我解决这个问题。

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2015-07-25
    • 2015-02-07
    相关资源
    最近更新 更多