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

Android 如何从片段A回到片段B?,android,back,onbackpressed,Android,Back,Onbackpressed,我需要从FragmentA转到FragmentB(我正在使用navigationdrawer) 我在FragmentB中创建此方法: public void onBackPressed(){ FragmentManager fm = getActivity().getFragmentManager(); fm.popBackStackImmediate(); } 但是它们不起作用,我如何实现这个方法呢?这个代码应该在活动中,包含这两个片段 请确保通过调用以下命令将片段添加(而不

我需要从FragmentA转到FragmentB(我正在使用navigationdrawer)

我在FragmentB中创建此方法:

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

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

这个代码应该在
活动中,包含这两个片段

请确保通过调用以下命令将片段添加(而不是替换)到后堆栈:

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

或支持库中的等效代码

此代码应位于包含这两个片段的
活动

请确保通过调用以下命令将片段添加(而不是替换)到后堆栈:

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

或者它们在支持库中的等价物

用于从一个片段转到另一个片段,我正在从片段调用活动的方法,以便活动的方法可以访问保存片段的视图,并且可以轻松切换

就像我片段中的这个

((MainActivity)getActivity())。从Item到Category()的转换

在这样的片段中

public void TransitionFromItemToCategory(){
    FoodCategoryFragment FCM = new FoodCategoryFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, FCM);
    ft.commit();
}

为了从一个片段转到另一个片段,我从片段调用活动的方法,以便活动的方法可以访问保存片段的视图,并且可以轻松切换

就像我片段中的这个

((MainActivity)getActivity())。从Item到Category()的转换

在这样的片段中

public void TransitionFromItemToCategory(){
    FoodCategoryFragment FCM = new FoodCategoryFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, FCM);
    ft.commit();
}

当你添加你的碎片时,你还必须将它添加到你的碎片的backbackback中

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();在片段的onBackPressed()方法中。

添加片段时,还必须将其添加到片段的backbackback中

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();在片段的onBackPressed()方法中。

用片段A替换片段B我该怎么做?你能给我举个例子吗?请参考手机左侧底部的@Rotwang i need to do“back”按钮,在你的活动的
onBackPressed()
事件中,什么会阻止你这样做?用片段A替换片段B我能做什么?你能给我举个例子吗?请参考手机左侧底部的@Rotwang我需要用“后退”按钮来做什么?在你的活动的
onBackPressed()
事件中,是什么阻止你这么做的?哦,我现在把我的
onBackPressed()
方法放在我的活动中,但现在当我点击“后退”按钮时他什么也不做你确定后靠背不是空的吗?如果它是空的,你应该调用
super.onBackPressed()
。哦,现在我把我的
onBackPressed()
方法放在我的活动中,但现在当我单击“后退按钮”时,他什么也不做。你确定backbackback不是空的吗?如果为空,则应调用
super.onBackPressed()
。可以将类名设置为String backStateName=FragmentB.class.getName();您可以将类名设置为String backStateName=FragmentB.class.getName();