我需要从FragmentA转到FragmentB(我正在使用导航器)
我在FragmentB中创建了这个方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
但它们不起作用,我该如何实现这种方法呢?
答案 0 :(得分:3)
添加片段时,您还必须将其添加到片段的后台。
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
ft.replace(R.id.content, fragment, backStateName);
ft.addToBackStack(backStateName);
ft.commit();
(此处R.id.content是您活动中的片段容器)
然后,您必须在包含片段的活动中覆盖onBackPressed方法。
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportFragmentManager().popBackStack();
}
}
如果要自定义onBackPressed,则可以检查活动中当前可见的片段,并创建回调以执行该特定片段的操作。 例子 -
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
if (fragment instanceof FragmentB) {
((FragmentB) fragment).onBackPressed();
// getSupportFragmentManager().popBackStack();
}
}
现在你可以添加getSupportFragmentManager()。popBackStack();在你的Fragment的onBackPressed()方法中。
答案 1 :(得分:0)
此代码应位于Activity
内,同时包含两个片段。
请确保通过调用:
将片段添加(不替换)到后台堆栈android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit
或来自支持库的等效文件
答案 2 :(得分:0)
为了将一个片段转到另一个片段,我从Fragment调用Activity的方法,以便Activity的方法可以访问该视图,该视图保存片段并且可以轻松切换。
在我的片段
中这样((MainActivity)getActivity())。TransitionFromItemToCategory();
在像这样的片段中
public void TransitionFromItemToCategory(){
FoodCategoryFragment FCM = new FoodCategoryFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, FCM);
ft.commit();
}