11

在 Android文档的 FragmentTransaction 项中,描述了该方法与对当前视图中添加的所有 Fragmentreplace()调用该方法remove()然后调用该方法相同add()。在这种情况下,为了恢复之前的片段,我们可以使用addBackToStack(),这意味着事务状态仍然由片段管理器管理,并且在我们弹出堆栈时将反转其操作。

另一方面,当我们使用 实现事务时add(),除了使用 之外add().addBackToStack(),我们还可以使用使用detach()方法和恢复片段attach(),它们的行为与addBackToStack().

那么这些场景在幕后有什么区别呢?

4

1 回答 1

11

我研究得更多,更明显的是,Fragment 的生命周期detach()和两者之间的区别。当我们在后addToBackStack ()栈中添加 Fragment 时,依次调用 methodsonPause()和. 在这种状态下,片段清理与其视图关联的资源并“停留”在那里等待再次调用。从后栈返回布局被称为仅用于片段绘制其用户界面的方法。实际上,片段并没有被破坏。onStop()onDestroyView()onCreateView()

另一方面,当我们使用detach()删除或替换片段时,依次调用所有首先引用的相同方法 ( onPause(), onStop(), onDestroyView()) 添加这两个方法:onDestroy(), 对片段的状态进行最终清理 , 将片段onDetach()分离为不再与其活动相关联。

基本上,在幕后,它们没有相同的行为:使用addToBackStack()片段保持实例化detach(),而不是。

于 2012-12-21T12:53:42.443 回答