当前位置: 首页 > 知识库问答 >
问题:

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

孔寒
2023-03-14

当我执行getSupportFragmentManager()时。Popbackback() 它弹出后堆栈,并执行与弹出的后堆栈条目相关联的片段事务。

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

“我的活动”在用户推广时执行3个事务:

  1. 片段A首先被添加到我的容器

下面是我执行事务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替换,但FragmentC在它上面画出之前,FragmentA也出现了,FragmentA继续出现在FragmentC后面。

我做错了什么?如何用FragmentC替换FragmentB,而不让FragmentA出现在背景中。


共有1个答案

上官鸿晖
2023-03-14

我找到了一个变通方法,如果不是解决方案的话。

似乎在事务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();
 类似资料:
  • 我试图通过活动中按钮的onclick事件将一个主片段替换为另一个片段,但该片段恰好悬停在主片段上。 这是我的密码

  • 我正在制作抽屉菜单,目前正在使用: getSupportFragmentManager()。开始交易()。替换(R.id.mainfragment,f1)。提交(); 但是正如你所看到的,它总是用新的片段替换主片段。谢谢!

  • 我有一个活动和两个片段。片断a和片断b。 我需要实现像,最初碎片应该在那里。在之后,单击FragmentB应该在那里。 我的第二段代码:

  • 问题内容: 我在小组活动中有一个片段,我想用另一个片段替换它: 在不使用活动组的情况下作为单独的项目完成时,它工作正常,当控件进入getview()时,每件事在日志猫中都可以正常工作,但是没有视图可见,甚至没有任何异常出现,我希望将书详细信息片段由部分详细信息片段代替。 图书详细信息片段的XML具有id book_description_fragment,而部分描述片段的xml具有id secti

  • 我正在通过片段“A”调用从服务器获取数据。当我用“B”替换“A”时,在从“B”返回到“A”之后,每次都会调用片段“A”,因此每次都会生成HTTPGET。如何避免这种情况,并在活动中重用类似REORDER_to_FRONT的片段? 我正在使用此代码替换为新片段 当我反压时,

  • 知道TargetFragment现在已被弃用,如何从DialogFragment调用片段的方法? 过去,我可以这样做: 父级碎片 对话框碎片 这不再可能,因为目标碎片现已弃用。 我读到可以使用setFragmentResultListener()传递变量,但是如何从DialogFragment调用ParentFragment.myMethod()方法呢?