1

当我执行getSupportFragmentManager().popBackStack();它时,它会弹出返回堆栈并执行与弹出的返回堆栈条目相关的片段事务。

我有 3 个片段:
- FragmentA
- FragmentB
- FragmentC

我的活动在用户推广时执行 3 次交易:

  1. 片段 A 首先添加到我的容器中。
  2. 然后分离 FragmentA 并添加 FragmentB。并且交易被添加到后台堆栈。
  3. 然后我想要的是 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 替换,但 Fragment A 也出现在 FragmentC 被绘制之前,并且 FragmentA 继续出现在 FragmentC 后面。

我究竟做错了什么?如何在后台不显示 FragmentA 的情况下将 FragmentB 替换为 FragmentC。

4

1 回答 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();
于 2015-07-06T16:27:28.590 回答