有人可以告诉我popBackStackImmediate
和popBackStack
之间的区别吗?我真的没有得到它,另外什么是“标志”0(零)意味着在popBackStack
的第二个?
非常感谢你的帮助......
答案 0 :(得分:16)
like twice
将立即在通话中执行弹出命令。结果可以在通话后立即验证。由于所有弹出操作都在通话中执行,因此速度稍慢。
popBackStackImmediate()
将在下一个事件循环周期(即下一个绘制阶段)内执行弹出命令。所以它与其余代码异步。这意味着在执行此操作后,{strong} 将从后台堆栈中删除popBackStack()
。在大多数情况下,你不会需要 FragmentTransaction
立即弹出,所以它会等到其他所有内容都实际发生之前完成。所有这些都发生得如此之快,以至于用户无法识别它。
最后的旗帜是无关的。目前只能将其设置为POP_BACK_STACK_INCLUSIVE。 FragmentTransaction
允许您在Backstack上设置ID。如果您设置了标志,那么它将弹出与指定ID匹配的FragmentManager
,直到有一个与ID不匹配或达到底部。如果未设置该标志,则会弹出与该ID不匹配的所有FragmentTransaction
,直到到达与ID匹配或达到底部的符号为止。
答案 1 :(得分:7)
popBackStack()
会弹出后台,但它不会稍稍执行弹出 - 它会发布一条消息来执行此操作,因此您不必等待重量级操作发生。
popBackStackImmediate()
在函数返回之前立即执行。它较慢并且可能导致性能问题。尽可能使用非立即版本。
0作为第二个参数意味着使用默认行为(删除backstack中的top元素)。您还可以传递一系列布尔ORed标志。目前唯一支持的标志是POP_BACK_STACK_INCLUSIVE,它会将其更改为删除多个片段。