【问题标题】:Two Fragments, two different layouts, one activity两个片段,两个不同的布局,一个活动
【发布时间】:2018-07-12 16:06:30
【问题描述】:

我有一个活动,它在相对布局中运行片段 A,

之后,在这个片段中,我尝试打开另一个片段 B,它只是一个覆盖,它在另一个 RelativeLayout 中运行,以查看片段 A 的上方,到目前为止,一切正常,但问题出在onBackPressed():

我打开覆盖片段 B,然后按返回按钮,但它只关闭片段 A。

这是我活动的 xml

<RelativeLayout
    android:id="@+id/main_fragment_replacement"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</RelativeLayout>

<RelativeLayout
    android:background="#0000"
    android:id="@+id/overlay_fragment_replacement"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

我认为这应该可以解释,但我愿意提供任何其他信息。

【问题讨论】:

  • 添加片段的完整java代码以及那个活动。

标签: java android android-fragments fragment onbackpressed


【解决方案1】:

添加 Fragments 时,您可以将它们添加到 backstack。

getSupportManager()
        .beginTransaction()
        .replace(R.id.container, fragment)
        .addToBackStack(null)
        .commit();

然后您可以简单地检查 多少 片段在您的后台堆栈中并删除例如Fragment B when 2当backstack包含两个fragment时。

【讨论】:

  • 第二个片段不能总是我的片段 B,因为我可以打开片段 C,它仍然是片段 A 之后堆栈中的第二个片段,但是如果我加入你的答案有了+Petros Masoyan 说的,有了标签,就可以做到,非常感谢你们^_^
  • documentation 可能会对您有所帮助。你也可以添加字符串,但最后只是一个简单的计算。
【解决方案2】:

您可以使用标签。在打开片段 B 之前,将标签设置为等于例如“a”。 覆盖 onBackPressed() 方法并检查标签的值。如果它等于“a”,则打开片段 a。如果它等于 "b" 则打开片段 b。

【讨论】:

    【解决方案3】:

    android documentation for Fragments 中提到了这个过程。

    如果您在执行删除片段的事务时不调用 addToBackStack(),那么当提交事务并且用户无法导航回该片段时,该片段将被销毁。然而,如果您在移除片段时确实调用了 addToBackStack(),则片段会停止,然后如果用户返回,则会恢复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多