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

时间:2012-12-04 13:19:18

标签: java android android-fragments fragmenttransaction

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

另一方面,当我们使用add()实施交易时,除add().addBackToStack()之外,我们可以使用detach()方法并使用attach()恢复片段,其行为与addBackToStack()相同。

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

1 个答案:

答案 0 :(得分:11)

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

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

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