当我执行 getSupportFragmentManager().popBackStack();
时,它弹出后栈并执行与弹出的后栈条目相关联的片段事务 .
我有3个片段:
- FragmentA
- FragmentB
- FragmentC
我的活动在用户提升时执行3次交易:
-
片段A首先添加到我的容器中 .
-
然后分离FragmentA并添加FragmentB . 并且事务被添加到后台堆栈 .
-
然后我想要的是FragmentC只替换fragmentB并更改后面的堆栈条目,这样当用户按下后退按钮时,FragmentA应该显示出来 .
这是执行事务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 .
1 回答
如果不是解决方案,我找到了解决方法 .
似乎在事务3中,当我删除FragmentB时,先前分离的FragmentA会自动添加 . 这就是导致FragmentA在FragmentC后面显示的原因 .
解决方法是在删除FragmentA之后再次分离FragmentA: