【问题标题】:How go back from Fragment A to Fragment B?如何从片段 A 回到片段 B?
【发布时间】:2016-09-22 09:24:45
【问题描述】:

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

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

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

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

【问题讨论】:

  • 用片段 A 替换片段 B
  • 我该怎么办?你能给我举个例子吗?
  • 请参考official docs
  • @Rotwang 我需要使用手机底部左侧的“返回”按钮
  • 在你的 Activity 的 onBackPressed() 事件中是什么阻止你这样做?

标签: android back onbackpressed


【解决方案1】:

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

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

【讨论】:

  • 你可以把你的类名当作 String backStateName = FragmentB.class.getName();
【解决方案2】:

这段代码应该在Activity 中,包含两个片段。

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

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

或来自支持库的等价物

【讨论】:

  • 哦 tnks 现在我把我的onBackPressed() 方法放在我的活动中但是现在当我点击“后退按钮”时他什么也不做......
  • 你确定Backstack不为空吗?如果为空,请致电super.onBackPressed()
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多