android - 按下后退按钮时如何用 fragment A替换 fragment C?

标签 android android-fragments back-stack fragmenttransaction

我的场景: Activity 1 由 fragment A-> B-> C 组成。所有 fragment 都使用以下代码添加:

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

现在,我想从 fragment C 直接返回 fragment A。因此,我在添加 fragment C 时注释了 ft.addToBackStack(TAG)。所以当我从 C 按下返回按钮时直接在屏幕上获取Fragment A。

但是,Fragment C 并没有被 A 取代。事实上,这两个 Fragment 都是可见的。我该如何解决这个问题?

最佳答案

您需要做两件事 - 从 A->B 命名 FragmentTransaction,然后在您的包含 Activity 中覆盖 onBackPressed() 以调用 FragmentManager#popBackStack (String name, int flags)当您在 fragment C 上时。示例:

从 A->B 过渡

getSupportFragmentManager()
  .beginTransaction()
  .replace(R.id.container, new FragmentB(), "FragmentB")
  .addToBackStack("A_B_TAG")
  .commit();

从 B->C 的转换将使用类似的交易,其标签为“FragmentC”。

然后在你包含的Activity中重写onBackPressed():

@Override
public void onBackPressed() {
  if (getSupportFragmentManager().findFragmentByTag("FragmentC") != null) {
    // I'm viewing Fragment C
    getSupportFragmentManager().popBackStack("A_B_TAG",
      FragmentManager.POP_BACK_STACK_INCLUSIVE);
  } else {
    super.onBackPressed();
  }
}

关于android - 按下后退按钮时如何用 fragment A替换 fragment C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984871/

相关文章:

java - 从 BackStack (Flag_Activity_no_history) 中删除 Activity 不起作用

android - 解析数据时出错 org.json.JSONException : End of input at character 10 of

java - ExpandableListView 中奇怪的空指针异常

android - react native 中的 "resource android:attr/fontVariationSettings not found."

android - 最佳实践 : Navigation Drawer

AndroidX 在 MultiSelectListPreference 上崩溃

android - 如何清除 Android Stack 的 Activity ?

java - 如何在 Android 上创建 50hz 方波并播放

java - 有没有办法在Android的Action Bar中应用过滤器

android - 导航 DrawerLayout 按钮永远不会更改为后退按钮,也不会导航