如何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)
这是最简单的答案,解释非常清楚:
这是正确的方式来清理碎片回堆栈时,留下一个深度嵌套堆栈?
- WinRT / UWP框架和页面caching:如何在Navigate()上创build新的页面实例,并保持页面实例在GoBack()
- 任何方式来防止OS X狮子Safari浏览器上的水平滚动触发滑回手势?
- Android计划支持Java7吗?
- 意图 – 如果活动正在运行,把它放在前面,否则启动一个新的(从通知)
- Android偏好设置:如何在用户没有使用偏好设置屏幕时加载默认值?
- 如何以编程方式将SelectableItemBackground添加到ImageButton?
- 如何解决一个Android Widget的“过程是坏的”错误?
- PreferenceFragment与android-support-v4的替代品
- CoordinatorLayout + AppBarLayout + NavigationDrawer
- 在可展开的listview android中折叠除选定组以外的所有组
- Android:无法将@ drawable /图片转换为绘图