从堆栈中弹出特定片段并删除其他片段
pop specific fragment from stack and remove others
如何从堆栈中弹出特定片段并从片段中移除其他片段?
例如,这些是我的片段,我在 E 就知道了。
A-> B -> C -> D ->E
想从 E 回到 B 并清除 C 和 D。
我该怎么做?
您可以在 Fragment E
中调用以下函数:
getFragmentManager().popBackStack("tag", 0);
这里的 tag
是作为标记传递的字符串,同时将 fragment B
添加到 backstack
。
你可以给每个片段添加一个标签,同时将它们添加到后台堆栈,然后从后台弹出片段,直到没有达到你想要的标签的片段。
FragmentManager fm = getFragmentManager();
for (int i = fm.getBackStackEntryCount() - 1; i > 0; i--) {
if (!fm.getBackStackEntryAt(i).getName().equalsIgnoreCase(tagname)) {
fm.popBackStack();
}
else
{
break;
}
}
使用以下代码弹出堆栈条目:
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}else {
super.onBackPressed();
}
tldr:如果代码不起作用,请尝试使用 fragmentManager 而不是 supportFragmentManager
解法:fragmentManager.popBackStackImmediate(tagName, 0)
我知道这是一个老问题,但在这个问题上花了几个小时后,我无法接近预期的结果。
我使用的是 supportFragmentManager,代码是:
supportFragmentManager.popBackStackImmediate(tagName, 0)
但根据文档中的内容,它没有按预期工作。
侥幸的是,我考虑使用 fragmentManager 而不是 supportFragmentManager,瞧,它成功了!
所以对于坚持这个的任何人,也许试一试。
如果您使用的是AndroidX导航,可以使用以下方式:
findNavController().popBackStack(R.id.FragmentB, false)
如何从堆栈中弹出特定片段并从片段中移除其他片段? 例如,这些是我的片段,我在 E 就知道了。
A-> B -> C -> D ->E
想从 E 回到 B 并清除 C 和 D。 我该怎么做?
您可以在 Fragment E
中调用以下函数:
getFragmentManager().popBackStack("tag", 0);
这里的 tag
是作为标记传递的字符串,同时将 fragment B
添加到 backstack
。
你可以给每个片段添加一个标签,同时将它们添加到后台堆栈,然后从后台弹出片段,直到没有达到你想要的标签的片段。
FragmentManager fm = getFragmentManager();
for (int i = fm.getBackStackEntryCount() - 1; i > 0; i--) {
if (!fm.getBackStackEntryAt(i).getName().equalsIgnoreCase(tagname)) {
fm.popBackStack();
}
else
{
break;
}
}
使用以下代码弹出堆栈条目:
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}else {
super.onBackPressed();
}
tldr:如果代码不起作用,请尝试使用 fragmentManager 而不是 supportFragmentManager
解法:fragmentManager.popBackStackImmediate(tagName, 0)
我知道这是一个老问题,但在这个问题上花了几个小时后,我无法接近预期的结果。
我使用的是 supportFragmentManager,代码是:
supportFragmentManager.popBackStackImmediate(tagName, 0)
但根据文档中的内容,它没有按预期工作。 侥幸的是,我考虑使用 fragmentManager 而不是 supportFragmentManager,瞧,它成功了!
所以对于坚持这个的任何人,也许试一试。
如果您使用的是AndroidX导航,可以使用以下方式:
findNavController().popBackStack(R.id.FragmentB, false)