如何从片段A回到片段B?

时间:2016-09-22 09:24:46

标签: android back onbackpressed

我需要从FragmentA转到FragmentB(我正在使用导航器)

我在FragmentB中创建了这个方法:

public void onBackPressed(){
    FragmentManager fm = getActivity().getFragmentManager();
    fm.popBackStackImmediate();
}

但它们不起作用,我该如何实现这种方法呢?

3 个答案:

答案 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();
}