当我执行getSupportFragmentManager().popBackStack();
时,它弹出后台堆栈并执行与弹出的后台堆栈条目相关联的片段事务。
我有3个片段:
- FragmentA
- 片段B
- FragmentC
我的活动在用户推广时执行3笔交易:
这是执行事务3的代码:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.popBackStack();
ft.remove(fragmentB)
.add(R.id.container, fragmentC, tag)
.addToBackStack(null)
.commit();
交易1和2似乎工作正常。但是,当我尝试执行事务3时,会发生的事情是FragmentB被FragmentC取代,但片段A也会在FragmentC被覆盖之前显示,FragmentA继续在FragmentC后面看到。
我做错了什么?如何在没有FragmentA背景显示的情况下用FragmentC替换FragmentB。
答案 0 :(得分:0)
如果不是解决方案,我找到了解决方法。
似乎在事务3中,当我删除FragmentB时,会自动添加先前分离的FragmentA。这就是导致FragmentA出现在FragmentC背后的原因。
解决方法是在删除FragmentA之后再次分离FragmentA:
ft.remove(fragmentB)
.detach(fragmentA) // Detach FragmentA that is automatically added by the removing of fragmentB
.add(R.id.container, fragmentC, tag)
.addToBackStack(null)
.commit();