我有一个如下所示的Fragment堆栈。
现在我需要移除F2、F3、F4片段。
如果我从F5片段按返回按钮,它应该回到F1。
注意:我不是从活动中更改片段,而是从片段中更改。
F1 -> F2 -> F3 -> F4 -> F5
现在我需要移除F2、F3、F4片段。
如果我从F5片段按返回按钮,它应该回到F1。
注意:我不是从活动中更改片段,而是从片段中更改。
F1 -> F2 -> F3 -> F4 -> F5
在销毁 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
}
Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent)
FragmentManager.popBackStack(String name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
这将弹出所有状态,直到指定的状态。
你可以使用F1来管理所有事情,从而实现这种行为。假设你正在进行一个过程,每个步骤都取决于上一个答案。你所要做的就是回到F1获取每个答案,然后让F1打开下一步。
例如:
1° 在F1中,你说你想显示一个人的电话号码
2° F1调用F2,在F2中搜索一个名字。当用户选择一个名字时,F2返回该名字并关闭
3° F1获取F2返回的名字,然后使用这个名字调用F3,并显示该号码
虽然不是很花哨,但至少在我需要做类似事情时起作用了。