我做过一些研究,但我真的找不到答案。
我有侧面菜单和持有人的单一活动。我有很多( 非支持 )片段,并且所有片段都使用相同的持有者(一次一个)。
当用户使用菜单(它在主要活动中)并进入另一个页面时,我想将当前片段的名称添加到backstack(使用.addToBackStack(Fragment1.class.getName())
),但我无法使用找到如何获得当前片段。
我不想实现界面等以跟踪当前片段。使用fragmentManger有一种超级简单的方法吗?
答案 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