如何使用Fragment标记名称获取Backstack中的片段索引

时间:2014-10-20 10:40:04

标签: android android-fragments

我能够使用下面的标记名称获取片段,

Fragment fragmentName = getSupportFragmentManager().findFragmentByTag("TagName");

但我需要在backstack中获取片段的索引

我想做什么

  • 我使用带有操作栏下拉列表的导航
  • 因此,在每个导航中,我继续添加片段而不进行替换,因为我将其添加到viewpager中。
  • 因此,当用户选择已从列表中添加的同一页面时,我需要显示该特定片段并删除当前片段上方的所有片段。
  • 我有当前片段的tagName,但没有当前片段上方片段的tagName,用于删除当前片段上方的片段。
  • 我试过

    getSupportFragmentManager().popBackStack("TagName", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    

  • 上面删除包含当前片段的片段。
  • 但我想只删除当前片段之上的片段。

    请指导我实现这一目标。

  • 1 个答案:

    答案 0 :(得分:1)

    要在backstack中获取片段的索引,您需要使用以下方法:

    private int getIndex(String tagname) {
        FragmentManager manager = getFragmentManager();
        for (int i = 0; i < manager.getBackStackEntryCount(); i++) {
            if (manager.getBackStackEntryAt(i).getName().equalsIgnoreCase(tagname)) {
                return i;
            }
        }
        return 0;
    }
    

    但是当您设置任何片段时,请将其插入带有标签名称的Backstack。

     fragmentTransaction.replace(android.R.id.tabcontent, fragment, tagname);
     fragmentTransaction.addToBackStack(tagname);
    

    我认为它会起作用,如果没有,请告诉我。