如何从 MainActivity 获取当前片段

How to get current fragment from MainActivity

我做了一些研究,但我真的找不到答案。

我有一个 activity 带侧边菜单和支架。我有很多(不支持)碎片,而且它们都使用相同的支架(一次一个)。

当用户使用菜单(在主activity中),然后进入另一个页面时,我想将当前片段的名称添加到后台堆栈(使用.addToBackStack(Fragment1.class.getName())),但我做不到找到如何获取当前片段。

我不想实现接口等来跟踪当前片段。不是有一个超级简单的使用 fragmentManger 的方法吗?

只需在 commit() 片段交易前使用 addToBackStack()See it here

因此您的代码将如下所示:

...
fragmentTransaction.replace(R.id.holder, newFragmentToShow, newFragmentTag);
fragmentTransaction.addToBackStack();
fragmentTransaction.commit();
...

编辑:OP 编辑​​后

您不需要片段 class 来调用 addToBackStack(),正如您在 OP 中提到的那样。 String 参数是一个可选的字符串,只是为了保持 backstack 状态的状态。你应该看到 documentation

它都是内部管理的,当前的活动片段会自动添加到backStack,你可以从任何你想调用的地方调用它,它总是使用当前的活动片段。

您可以跟踪主 activity 中的片段(带有变量)并在那里访问它们。示例:

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

MyFragment myFragment = new MyFragment();

myFragment.doSomething();

添加到后台堆栈:

FragmentTransaction fragment = getSupportFragmentManager().beginTransaction();
fragment.addToBackStack(fragment);
fragment.commit();

此处回答:get currently displayed fragment

您可以这样获取当前片段:

if (getFragmentManager().getBackStackEntryCount() > 1) {
            Fragment f = getFragmentManager().findFragmentById(R.id.content_frame);
            if (f instanceof BlankFragment) {
                // Do something
            }
}

您可以使用它来获取不支持片段的片段 ID

Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_id);

    if(fragment!=null)
    {
        getFragmentManager()
                .beginTransaction()
                .addToBackStack(null)
                .commit();
    }

好的,

如果你想从后台获取最新条目(感谢@AndroidGeek);

fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-1);

并且,如果您想获取当前活动的片段(感谢@Salman500 @AndroidGeek);

Fragment f = getFragmentManager().findFragmentById(R.id.fragment_holder);