两个片段,两种不同的布局,一项活动

时间:2018-07-12 16:06:30

标签: java android android-fragments fragment onbackpressed

我有一个活动,该活动在RelativeLayout的开头运行片段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">

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

添加片段时,您可以将它们添加到您的堆栈中。

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

然后,您可以简单地检查多少片段,并删除例如 2 时的B片段,而后堆栈包含两个片段。

答案 2 :(得分:0)

android documentation for Fragments中提到了此过程。

  

如果在执行删除片段的事务时未调用addToBackStack(),则在提交事务时该片段将被销毁,并且用户无法导航回该片段。而如果您在删除片段时确实调用addToBackStack(),则该片段将停止,并且如果用户向后导航,该片段将在以后恢复。