在FragmentTransaction中使用add()。addToBackStack(),add()。detach()和replace()。addToBackStack()之间有什么区别?

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

另一方面,当我们使用add()实现事务时,除了使用add().addBackToStack() ,我们可以使用detach()方法并使用attach()恢复片段,它具有与addBackToStack()

那么这些场景之间的幕后差异是什么?

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

另一方面,当我们使用detach()来删除或替换片段时,会按顺序调用所有相同的方法( onPause(), onStop(), onDestroyView() )添加这两个方法: onDestroy() ,to最后清理片段的状态和onDetach(),将片段分离为不再与其Activity关联。

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