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

问题描述 投票:10回答:1

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

[另一方面,当我们使用add()实现事务时,除了使用add().addBackToStack()之外,我们还可以使用detach()方法并使用attach()恢复片段,其行为与addBackToStack()相同]。

那么这些场景之间的幕后有什么区别?

java android android-fragments fragmenttransaction
1个回答
11
投票
我进行了越来越多的研究,显然detach()addToBackStack ()之间的区别在于Fragment的生命周期。当我们在后台堆栈中添加Fragment时,依次调用方法onPause()onStop()onDestroyView()。在这种状态下,片段清理与其视图关联的资源,并“停留”在那里等待再次调用。从后栈返回布局称为方法onCreateView(),仅用于片段绘制其用户界面。实际上,该片段不会被破坏。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.