在Android docs上的FragmentTransaction项目中,描述方法replace()
与为当前视图中添加的所有片段调用方法remove()
相同,然后调用方法add()
。在这种情况下,为了恢复先前的片段,我们可以使用addBackToStack()
,这意味着事务状态仍由片段管理器管理,并在我们弹出堆栈时将反转其操作。
另一方面,当我们使用add()
实施交易时,除add().addBackToStack()
之外,我们可以使用detach()
方法并使用attach()
恢复片段,其行为与addBackToStack()
相同。
那么这些场景之间的幕后差异是什么?
答案 0 :(得分:11)
我研究得更多,显然,detach()
和addToBackStack ()
之间的区别在于Fragment的生命周期。当我们在后面的堆栈中添加Fragment时,会按顺序调用方法onPause()
,onStop()
和onDestroyView()
之后的方法。在这种状态下,片段清理与其视图关联的资源并“停留”在那里等待再次调用。从后向堆栈返回布局称为方法onCreateView()
,仅用于片段绘制其用户界面。实际上,片段没有被破坏。
另一方面,当我们使用detach()
删除或替换片段时,会按顺序调用所有相同的方法(onPause(), onStop(), onDestroyView()
)添加这两种方法:onDestroy()
,最后清理片段的状态和
onDetach(),将片段分离为不再与其Activity相关联。
基本上,在幕后,他们没有相同的行为:使用addToBackStack()
片段保持实例化,detach()
,不要。