Android 如何仅用另一个片段替换片段后堆栈顶部的项?
当我执行Android 如何仅用另一个片段替换片段后堆栈顶部的项?,android,android-fragments,fragment-backstack,fragmentmanager,Android,Android Fragments,Fragment Backstack,Fragmentmanager,当我执行getSupportFragmentManager().popbackbackstack()时它弹出后堆栈并执行与弹出的后堆栈条目相关联的片段事务 我有3个片段: -碎片a -碎片b -碎片 “我的活动”在用户升级时执行3个事务: 片段A首先添加到我的容器中 然后分离碎片A并添加碎片B。事务被添加到后堆栈中 然后我想要的是FragmentC只替换fragmentB并更改back stack条目,这样当用户按下back按钮时,FragmentA就会出现 以下是我执行事务3的代码: Frag
getSupportFragmentManager().popbackbackstack()时代码>它弹出后堆栈并执行与弹出的后堆栈条目相关联的片段事务
我有3个片段:
-碎片a
-碎片b
-碎片
“我的活动”在用户升级时执行3个事务:
片段A首先添加到我的容器中李>
然后分离碎片A并添加碎片B。事务被添加到后堆栈中李>
然后我想要的是FragmentC只替换fragmentB并更改back stack条目,这样当用户按下back按钮时,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替换,但是FragmentC在它上面画出之前,FragmentA也出现了,FragmentA继续出现在FragmentC后面
我做错了什么?如何用FragmentC替换FragmentB,而不让FragmentA出现在背景中。如果不是解决方案,我找到了一个解决方法
似乎在事务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();
我找到了一个解决办法,如果不是解决办法的话
似乎在事务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();
popBackStack()
仅pops/删除添加到队列上的最后一个片段
,不执行任何进一步的操作。你到底想实现什么?@hrskrs你说得对!只是这似乎正在发生。我已将问题更改为包含代码片段和描述性工作。popBackStack()
仅pops/removes
添加到队列上的最后一个片段
,并且不执行任何进一步的操作。你到底想实现什么?@hrskrs你说得对!只是这似乎正在发生。我已将我的问题更改为包含代码片段和描述性工作。使用此解决方案,当您按下后退按钮时,fragmentA
是否会显示?否。但是,在FragmentC显示之前,一个空白屏幕会闪烁。但我认为这不是一个相关的问题,可以如图所示进行修复。使用此解决方案,当您按下后退按钮时,fragmentA
是否会显示?否。但是,在FragmentC显示之前,一个空白屏幕会闪烁。但我认为这不是一个相关的问题,可以如图所示进行修复。