如何从 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);
我做了一些研究,但我真的找不到答案。
我有一个 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);