如何从 Fragment A 返回到 Fragment B?

How go back from Fragment A to Fragment B?

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

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

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

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

此代码应在 Activity 内,包含两个片段。

确保您将片段添加(而不是替换)到后台堆栈,方法是调用:

android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit

或支持库中的等效项

为了将一个片段转到另一个片段,我从片段调用 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();
}

添加片段时,还必须将其添加到片段的后台堆栈中。

FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
                  ft.replace(R.id.content, fragment, backStateName);
                  ft.addToBackStack(backStateName);
                  ft.commit();

(此处 R.id.content 是您 activity 中的片段容器)

然后您必须在包含片段的 activity 中覆盖 onBackPressed 方法。

@Override
public void onBackPressed() {
 if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
                 getSupportFragmentManager().popBackStack();
  }
}

如果您想自定义您的 onBackPressed,那么您可以在 activity 中检查您当前可见的片段,并创建一个回调来为该特定片段执行操作。 示例 -

    @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() 方法中。