如何从MainActivity获取当前片段

时间:2017-07-21 21:57:44

标签: android android-fragments fragmentmanager

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

我有侧面菜单和持有人的单一活动。我有很多( 非支持 )片段,并且所有片段都使用相同的持有者(一次一个)。

当用户使用菜单(它在主要活动中)并进入另一个页面时,我想将当前片段的名称添加到backstack(使用.addToBackStack(Fragment1.class.getName())),但我无法使用找到如何获得当前片段。

我不想实现界面等以跟踪当前片段。使用fragmentManger有一种超级简单的方法吗?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

行,

如果你想从backstack获得最新的条目(感谢@AndroidGeek);

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

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

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

答案 2 :(得分:1)

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

struct

答案 3 :(得分:0)

addToBackStack()片段转换之前使用commit()See it here

所以你的代码看起来像是:

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

编辑:OP编辑后

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

全部内部管理,当前活动片段自动添加到backStack,您可以从任何地方调用它,它将始终使用当前活动片段。

答案 4 :(得分:0)

您可以跟踪主要活动中的片段(使用变量)并在那里访问它们。例如:

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

MyFragment myFragment = new MyFragment();

myFragment.doSomething();

添加到后台:

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

在此处回答:http://imgur.com/a/iQ70T