获取后退栈中的最后一个片段

15

我看到了这篇文章,但这里发布的解决方案对我没有用:get the latest fragment in backstack

当我替换一个片段时,我使用以下代码:

FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();

    ft.replace(android.R.id.tabcontent, fragment, tag);
    ft.addToBackStack(null);

    ft.commit();

请注意,我正在使用标签来检测任何片段。

我特别遇到的问题是:

假设我有 fragment_A、fragment_B 和 fragment_C。我可以从 fragment_A 或 fragment_B 到达 fragment_C,并且根据调用的父级别,我需要执行特定的操作。所以,我需要恢复后退堆栈中的最后一个 FRAGMENT。

当我尝试这样做时:

FragmentManager fm = getSupportFragmentManager();

        for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
            String ide = fm.getBackStackEntryAt(entry).getName();
           Log.i("TAG", "Found fragment: " + ide);
        }

我得到了null值。如果我使用getId(),我会得到数字,因此我尝试做:

int id = fm.getBackStackEntryAt(entry).getId();
Fragment fragment = fm.findFragmentById(id);
Log.i("TAG", "Found fragment: " + fragment.getTag());

但是我得到了null值..我不知道还能做什么,所以非常感谢任何帮助。

编辑:我在onBackPressed() { ...}中调用这些方法。

1个回答

16

如果你正在使用BackStackEntry.getName(),应该这样写:

ft.replace(android.R.id.tabcontent, fragment, tag);
ft.addToBackStack(tag);

在编程中,使用相同的标签来添加或替换片段是不好的做法。而且,回退栈实际上应该是前一个片段的名称,以便记住事务与该片段相关联。 - eC Droid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接