首页 文章

如何只用另一个片段替换片段后栈顶部的项目?

提问于
浏览
0

当我执行 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 回答

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

相关问题