如何从栈中弹出特定片段并从一个片段中删除其他片段呢? 例如,这是我的片段,我现在在E。
A-> B -> C -> D ->E
想要从E返回到B并清除C和D。 我该怎么做?
您可以在将片段添加到返回堆栈时为每个片段添加一个标记,然后从返回堆栈中弹出片段,直到达到所需的带有标记的片段。
FragmentManager fm = getFragmentManager();
for (int i = fm.getBackStackEntryCount() - 1; i > 0; i--) {
if (!fm.getBackStackEntryAt(i).getName().equalsIgnoreCase(tagname)) {
fm.popBackStack();
}
else
{
break;
}
}
当你在Fragment E
中时,可以调用下面的函数:
getFragmentManager().popBackStack("tag", 0);
在这里,当将片段B
添加到后退栈
时,tag
标签是作为字符串传递的。
如果您正在使用AndroidX导航,可以使用以下方法:
findNavController().popBackStack(R.id.FragmentB, false)
tldr:如果代码不起作用,请尝试使用fragmentManager而不是supportFragmentManager
解决方案:fragmentManager.popBackStackImmediate(tagName, 0)
我知道这是一个老问题,但在花费几个小时后,我无法接近所需的结果。
我正在使用supportFragmentManager,代码如下:
supportFragmentManager.popBackStackImmediate(tagName, 0)
但它既不能按照预期工作,也不符合文档中的说明。偶然间,我想到使用fragmentManager而不是supportFragmentManager,然后它奏效了!
因此,对于任何卡在这里的人,可以尝试一下这个方法。
使用以下代码弹出堆栈条目:
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}else {
super.onBackPressed();
}