从堆栈中弹出特定片段并删除其他片段

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)