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

Java 两个片段,两个不同的布局,一个活动,java,android,android-fragments,fragment,onbackpressed,Java,Android,Android Fragments,Fragment,Onbackpressed,我有一个活动,在RelativeLayout中开始运行片段A 在此之后,在这个片段中,我尝试打开另一个片段B,它只是一个覆盖,它运行在另一个RelativeLayout中,查看片段A上方,到目前为止,一切正常,但问题在于onBackPressed() 我打开覆盖片段B,然后按下后退按钮,但它只关闭片段A 这是我的活动的xml <RelativeLayout android:id="@+id/main_fragment_replacement" android:layout_

我有一个活动,在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">


我想这应该可以解释,但我可以提供任何其他信息。

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

添加片段时,可以将它们添加到backbackback中

getSupportManager()
        .beginTransaction()
        .replace(R.id.container, fragment)
        .addToBackStack(null)
        .commit();
然后,您可以简单地检查您的backbackback中有多少个碎片,并在backbackback包含两个碎片时删除例如碎片B

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


添加完整的java代码片段以及该活动。第二个片段不可能总是我的片段B,因为我可以打开片段C,它仍然是片段A之后堆栈中的第二个片段,但是如果我用+Petros Masoyan所说的,加上标签,它就可以完成了,非常感谢你们两位,这可能会对你们有所帮助。您也可以添加字符串,但最后它只是一个简单的计算。