如何popup与多个片段活动的堆栈?

活动布局图片

假设我有一个活动,其中包含两个FrameLayout(让我们称之为FrameA和FrameB), 每个 FrameLayouts包含一个片段(我们称它们分别为FragmentA1和FragmentB1)。 现在,我使用与以下类似的代码提交一系列单独的片段事务…

getFragmentManager() .beginTransaction() .replace(frameId, fragment) .addToBackStack(null) .commit(); 

…这样我用FragmentA2replaceFrameA中的FragmentA1,然后用FragmentB2replaceFrameB中的FragmentB1,然后用FragmentA3replaceFrameA中的FragmentA2,然后用FragmentB3replaceFrame2中的FragmentB2,最终状态如上图所示只有FragmentA3和FragmentB3可见)。

如果我正确理解了背堆栈是如何工作的,按'back'会交错地插入FrameA和FrameB之间的碎片(反映我如何添加它们)。

有谁知道是否有可能select性地popupFrameA或FrameB上的最后一个事务? (也就是说,如果我按下了“Pop FrameA”,那么FrameA将从FragmentA3转换回FragmentA2,而如果我按下了“Pop FrameB”,则FrameB将从FragmentB3转换回FragmentB2)

补充:我知道我可以使用FragmentManager.findFragmentById(int framelayoutId)方法将片段最后添加到给定的FrameLayout中,但调用FragmentTransaction.remove(fragment).commit()只会从片段中删除片段,回到之前显示的片段。

基本上,不,一个活动只有一个回合。

你只需要实现你自己的单独的背堆栈。

从Android 4.0(以及相关的支持库)开始,有一些API可以让这个过程变得相对简单–FragmentTransaction.detach(Fragment)可以让你把一个片段放到它在后退堆栈中的状态,而FragmentManager.saveFragmentInstanceState片段)可以让你走得更远,完全扔掉碎片对象。 不巧的是,这些用来分别实现ViewPager的FragmentPagerAdapter和FragmentStatePagerAdapter,所以你可以看看这些代码作为如何使用它们的例子。

 FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE) 

这是最简单的答案,解释非常清楚:
这是正确的方式来清理碎片回堆栈时,留下一个深度嵌套堆栈?