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

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(),不要.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...