在FragmentTransaction中,使用add().addToBackStack()、add().detach()和replace().addToBackStack()有什么区别?

11
在 Android 的 FragmentTransaction docs 中,它描述了方法 replace() 和当前视图中添加的所有片段调用方法 remove() 并调用方法 add() 是相同的。在这种情况下,要恢复上一个片段,我们可以使用 addBackToStack(),这意味着事务状态仍由片段管理器管理,并且将在弹出堆栈时撤消其操作。
另一方面,当我们使用 add() 实现事务时,除了使用 add().addBackToStack(),我们还可以使用 detach() 方法并使用 attach() 恢复片段,其行为与 addBackToStack() 相同。
那么这些场景背后的差异是什么?
1个回答

11

我进行了更多的研究,显然 detach()addToBackStack() 的区别在于 Fragment 的生命周期。当我们将 Fragment 添加到后退栈中时,会按顺序调用方法 onPause()onStop(),最后是 onDestroyView()。在此状态下,Fragment 清除与其视图相关联的资源并“停留”在那里等待再次调用。从后退栈返回布局时,只需为该片段调用方法 onCreateView() 来绘制其用户界面。实际上,Fragment 并未被销毁。

另一方面,当我们使用 detach() 来移除或替换 Fragment 时,会按相同顺序调用所有先前提到的方法 (onPause(), onStop(), onDestroyView()),并添加这两个方法:onDestroy(),以对 Fragment 的状态进行最终清理,onDetach(),以分离 Fragment 以不再与其 Activity 相关联。

基本上,在幕后它们的行为不同:使用 addToBackStack() 使 Fragment 保持实例化,而使用 detach() 则不会。


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