我的项目中有五个不同的片段,我们称之为A ...... E。 A和B仅在用户打开应用程序时可见。那些负责显示加载屏幕(检查当前登录会话)和登录屏幕本身。片段C是该应用程序的主屏幕,用户可以使用该屏幕到达应用程序的其他区域。正因为如此,在创建/提交事务时,片段D和E得到了“addToBackStack(String)”额外的内容。
导致空白屏幕的问题是用户打开D或E并再次返回C.此操作可能会首次导致C的空白屏幕或多次重做该步骤。
相关片段C,D,E使用视图持有者,数据绑定和回收者视图。每个回收站视图都有多种视图类型。
似乎onBackPressed到C正在正确执行,但C已从缓存中删除或类似的东西。
希望有人可以帮我解决这个问题。
答案 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();
}