简单的问题,但似乎无法回答...... 如何在不弹出片段的情况下清除fragmentManager后台堆栈?
我理解如下:
返回堆栈条目=使用addToBackStack命令预先保存的事务列表。 例如:"将片段1替换为片段2"。
popBackStack =最后保存的transatcion反向。 例如:"将片段2替换为片段1"。
让我说我做了第一笔交易:F1-> F2并将此交易添加到后台。当我按下后退按钮时,F2-> F1将会发生。
OK ...但是...
我改变了主意,想要清理后面的筹码。 我希望用户使用F2片段,但当他/她按下后退按钮时,Activity应该关闭,就像后面的堆栈是空的一样。
我需要类似的东西:
for(int i=0;i<getFragmentManager().getBackStackEntryCount();i++){
getFragmentManager().getBackStackEntryAt(i).remove();
}
EDITED 我试图向复杂的情况提出简单的问题,我得到简单的答案;) Abhishek Patel的答案非常好,但这不是我想要的。它仍然是一个很好的答案。
只是为了澄清: android中的后台堆栈不是完全可编辑的列表,如:
我们不能做&#34;删除交易3&#34;制作:
我们无法清除所有后端堆栈并使最后一个可见片段保持活动状态。
我们可以将backstacks记录删除到某个位置,如: &#34;删除交易2和#34;得到:
在屏幕上,您将看到交易2的效果。
为什么我需要这个?
我认为我可以创建一个片段,它将是主要片段&#39;。这个主片段将使用一个接口告诉它现在显示的任何活动,现在显示这个boss片段,以及之前发生的任何事情 - 不再重要了。
(F) - 片段,(A) - 活动
(F) - 嘿老兄。我是老板,我可见并依附于你。请为我清理你的背包,但保留我带来的交易。
(A) - 对不起男人......你应该在交易前告诉我清理我的靠背堆,这样我就可以在新的背斜堆上添加你的交易了。
答案 0 :(得分:7)
试试这可能会有所帮助
public void clearBackstack() {
BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(
0);
getSupportFragmentManager().popBackStack(entry.getId(),
FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().executePendingTransactions();
}