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

时间:2016-08-09 14:01:00

标签: android stack fragment

如何从堆栈中弹出特定片段并从片段中删除其他片段? 例如,这些是我的片段,我在E中就知道了。

A-> B - > C - > D - > E

想从E回到B和清除C和D. 我怎么能这样做?

5 个答案:

答案 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一样,它奏效了!

因此,对于任何坚持这一点的人,都可以尝试一下。