Adi*_*ain 50 android android-fragments

假设我有一个包含两个FrameLayouts的Activity(让我们称之为FrameA和FrameB),它们每个都包含一个Fragment(让我们分别称它们为FragmentA1和FragmentB1).现在,我使用类似于以下代码提交一系列单独的片段事务...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)
...这样我用FramementA2替换FrameA中的FragmentA1,然后用FragmentB2替换FrameB中的FragmentB1,然后用FragmentA3替换FrameA中的FragmentA2,然后用FragmentB3替换Frame2中的FragmentB2,最终状态如上图所示(其中只有FragmentA3和FragmentB3可见).
如果我正确理解后栈是如何工作的,按"后退"将交错在FrameA和FrameB之间弹出片段(反映我是如何添加它们的).
有谁知道是否有可能选择性地在FrameA或FrameB上弹出最后一笔交易?(即如果我按下'Pop FrameA',那么FrameA将从FragmentA3转换回FragmentA2,相反,如果我按下'Pop FrameB',那么FrameB将从FragmentB3转换回FragmentB2)
补充:我知道我可以使用该
FragmentManager.findFragmentById(int framelayoutId)方法将片段最后添加到给定的FrameLayout ,但调用FragmentTransaction.remove(fragment).commit()仅从视图中删除片段,并且不会将视图转换回先前显示的片段.
hac*_*bod 26
基本上,不,一个活动只有一个后台.
您只需要实现自己独立的后台堆栈.
从Android 4.0(以及相关的支持库)开始,有一些API可以让它变得相对容易 - FragmentTransaction.detach(Fragment)允许你将片段放入后栈中的状态,以及FragmentManager.saveFragmentInstanceState( Fragment)让你更进一步,完全扔掉Fragment对象.并非巧合,它们分别用于实现ViewPager的FragmentPagerAdapter和FragmentStatePagerAdapter,因此您可以查看这些代码作为如何使用它们的示例.
小智 14
FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
Run Code Online (Sandbox Code Playgroud)
这是最简单的答案,解释非常明确:
这是否是在离开深层嵌套堆栈时清理Fragment堆栈的正确方法?
| 归档时间: |
|
| 查看次数: |
54535 次 |
| 最近记录: |