【问题标题】: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();
}