如何从堆栈中弹出特定片段并从片段中删除其他片段? 例如,这些是我的片段,我在E中就知道了。
A-> B - > C - > D - > E
想从E回到B和清除C和D. 我怎么能这样做?
答案 0 :(得分:13)
您可以将标记添加到每个片段,同时将它们添加到backstack,然后从backstack进行popfragment,直到找不到包含所需标记的片段。
FragmentManager fm = getFragmentManager();
for (int i = fm.getBackStackEntryCount() - 1; i > 0; i--) {
if (!fm.getBackStackEntryAt(i).getName().equalsIgnoreCase(tagname)) {
fm.popBackStack();
}
else
{
break;
}
}
答案 1 :(得分:7)
您可以在Fragment E
:
getFragmentManager().popBackStack("tag", 0);
此处tag
是将fragment B
添加到backstack
时作为标记传递的字符串。
答案 2 :(得分:1)
如果您使用的是AndroidX导航,则可以使用以下内容:
findNavController().popBackStack(R.id.FragmentB, false)
答案 3 :(得分:0)
使用以下代码来弹出堆栈条目:
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}else {
super.onBackPressed();
}
答案 4 :(得分:0)
tldr:如果代码不起作用,请尝试使用fragmentManager代替supportFragmentManager
解决方案:fragmentManager.popBackStackImmediate(tagName, 0)
我知道这是一个古老的问题,但是花了几个小时之后,我无法接近预期的结果。
我正在使用supportFragmentManager,代码为:
supportFragmentManager.popBackStackImmediate(tagName, 0)
但是根据文档中的内容,它既没有按预期运行。 就像我想过要使用fragmentManager代替supportFragmentManager和voila一样,它奏效了!
因此,对于任何坚持这一点的人,都可以尝试一下。