一个简单的问题却似乎无法回答... 如何清除fragmentManager的回退栈而不弹出片段?
我理解它是这样的:
回退栈条目 = 具有addToBackStack命令的事先保存的交易列表。例如:“用Fragment 2替换Fragment 1”。
popBackStack = 做最后一个保存的事务的反向操作。例如:“用Fragment 1替换Fragment 2”。
假设我做了第一笔交易:F1->F2,并将此交易添加到回退栈中。现在当我按下返回按钮时,F2->F1 将会发生。
好了...但是...
我改变了主意,我想清除回退栈。 我希望用户使用F2片段,但当他/她按下返回按钮时,活动应该像回退栈为空一样关闭。
我需要这样的东西:
for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++){
getFragmentManager().getBackStackEntryAt(i).remove();
}
编辑过的内容 我尝试将简单的问题提出到复杂的情况中,但却得到了简单的答案;) Abhishek Patel的回答非常好,但不是我想要的。不过这仍然是一个很好的答案。
澄清一下: 在Android中,“返回栈”不是像以下完全可编辑的列表:
- transaction 1
- transaction 2
- transaction 3
- transaction 4
我们无法执行“删除transaction 3”以获得:
- transaction 1
- transaction 2
- transaction 4
我们不能清除所有返回栈并保留最后一个可见片段。
我们可以删除返回栈记录到特定位置,例如:“删除Transaction 2之前的所有内容”,以获得:
- transaction 1
- transaction 2
在屏幕上,您将看到Transaction 2的效果。
为什么我需要这个?
我认为我可以创建一个片段,它将成为“主要片段”。这个主要片段将使用接口告诉它所在的任何活动,这个老板片段现在正在显示,并且发生在其之前的所有事情都不再重要。
(F)- 片段,(A)- 活动
(F)- 嘿,伙计。我是老板,我是可见的并附加到你身上。请为我清除您的返回栈,但保留带我到这里的事务。
(A)- 对不起,伙计...你应该在执行事务以清除我的返回栈之前告诉我,这样我就可以将你的事务添加到全新的返回栈顶部。