如何从当前片段中删除除当前片段和第一个片段之外的所有先前片段?

9
我有一个如下所示的Fragment堆栈。
F1 -> F2 -> F3 -> F4 -> F5

现在我需要移除F2、F3、F4片段。
如果我从F5片段按返回按钮,它应该回到F1。
注意:我不是从活动中更改片段,而是从片段中更改。

可能是这个问题的重复 - Vadim Kotov
3个回答

11

在销毁 F5 Fragment 时,清除 F2 及其之前的所有 Back Stack

可以尝试以下代码:

MainActivity 中的公共方法:

public void clearBackStackInclusive(String tag) {
     getSupportFragmentManager().popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

现在在您的F5片段中:

@Override
public void onDestroy() {
   super.onDestroy();
   ((MainActivity)getActivity()).clearBackStackInclusive("tag"); // tag (addToBackStack tag) should be the same which was used while transacting the F2 fragment
}

参考资料


2
您可以使用标志管理任务。例如,这将清除主页顶部所有的活动。
Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent)

如果在主活动上启动了4个或5个或更多任务,您可以在第五个任务上调用finish()并返回主屏幕。
我期待着它的片段版本,但这取决于您如何管理任务。
编辑
我已经找到了片段版本:
FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)

这将弹出所有状态,直到指定的状态。


0

你可以使用F1来管理所有事情,从而实现这种行为。假设你正在进行一个过程,每个步骤都取决于上一个答案。你所要做的就是回到F1获取每个答案,然后让F1打开下一步。

例如:
1° 在F1中,你说你想显示一个人的电话号码
2° F1调用F2,在F2中搜索一个名字。当用户选择一个名字时,F2返回该名字并关闭
3° F1获取F2返回的名字,然后使用这个名字调用F3,并显示该号码

虽然不是很花哨,但至少在我需要做类似事情时起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接