Android-管理片段交换

Android-管理片段交换,android,android-listfragment,back-stack,Android,Android Listfragment,Back Stack,我的应用程序有一个活动A,它在创建时加载ListFragment->Fa 选择其中一个项目时,Fa将添加到backbackback,并用另一个具有不同数据集的Fa实例替换 在Fa的这个新实例中选择一个项目将其放在BackStack中,并用第三个ListFragment->Fb替换它,后者的布局不同 Fb设计为以分页方式显示列表,底部有两个按钮,(上一个)和(下一个) 现在,我希望当用户单击next按钮时,我应该使用Fb的新实例显示列表的下一页,但我不希望将其上一个实例添加到Backback,这样

我的应用程序有一个活动A,它在创建时加载ListFragment->Fa

选择其中一个项目时,Fa将添加到backbackback,并用另一个具有不同数据集的Fa实例替换

在Fa的这个新实例中选择一个项目将其放在BackStack中,并用第三个ListFragment->Fb替换它,后者的布局不同

Fb设计为以分页方式显示列表,底部有两个按钮,(上一个)和(下一个)

现在,我希望当用户单击next按钮时,我应该使用Fb的新实例显示列表的下一页,但我不希望将其上一个实例添加到Backback,这样当用户按下设备上的back按钮时,他应该被带到Fa的第二个实例,而不是Fb的上一个实例

我能够完成所有的前向遍历位以及上一个和下一个按钮任务,但是现在当我按下后退按钮时,Fa的第二个实例出现了,但是Fb的最后一个实例没有被删除,可以在背景中看到


当我按下后退按钮时,如何删除Fb的所有实例并仅显示Fa。

您可以覆盖后退按钮行为并将后退堆栈“弹出”到所需片段:

@Override
public void onBackPressed() {
    fragmentManager.popBackStack(R.id.fragmentA, 0);
}

popbackbackback
将消耗所有片段,直到它到达调用时提供的片段。

在我的例子中,Fa和Fb的ContainerWebID是相同的。然而,这两个片段的片段类是不同的。有没有一种方法可以根据片段的类别删除它们。啊,我明白了,目前我唯一想做的就是在替换/添加两个片段时给它们分配一个标记,然后用标记而不是引用弹出后堆栈。你能帮我实现吗。假设我的片段Fa的标题是“组健康”,因此我可以将“组健康”作为字符串标记传递给addToBackStack()。对于我的第二个片段类型,我使用标题“Drilldown”,因此为此,我可以将其作为addToBackStack(“Drilldown”)添加到后堆栈中……现在,我应该像onBackPressed()中的popBackStack(“GroupHealth”,0)那样调用它吗?是的,看起来不错。有关更多信息,请参阅我的堆栈类似于GroupHealth->GroupHealth->Drilldown->Drilldown。现在,当我按下后退键时,我的堆栈应该是GroupHealth->GroupHealth。为此,我是否将“GroupHealth”或“Drilldown”传递给popbackbackstack()?另外,我是否需要将其放入一个循环中,或者该递归将由popBackStack本身处理?