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