gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:39 24 4
gpt4 key购买 nike

在 Android 上的 FragmentTransaction 项中 docs ,说明方法replace()与调用方法remove()是一样的,对当前view中添加的所有fragment调用方法添加()。在这种情况下,要恢复之前的 fragment ,我们可以使用 addBackToStack(),这意味着事务状态仍然由 fragment 管理器管理,并且在我们从堆栈中弹出时将反转它的操作。

另一方面,当我们使用 add() 实现事务时,除了使用 add().addBackToStack() 之外,我们还可以使用 detach() 方法并使用 attach() 恢复 fragment ,这与 addBackToStack() 具有相同的行为。

那么这些场景背后的区别是什么?

最佳答案

我研究了很多,显然detach()addToBackStack()的区别在于Fragment的生命周期。当我们在返回栈中添加 fragment 时,依次调用方法onPause()onStop()onDestroyView()之后.在这种状态下, fragment 清理与其 View 关联的资源并“停留”在那里等待再次调用。从返回堆栈返回到布局调用方法 onCreateView() 只是为了 fragment 绘制其用户界面。实际上, fragment 并没有被破坏。

另一方面,当我们使用detach() 来删除或替换 fragment 时,会依次调用所有首先引用的相同方法(onPause()onStop(), onDestroyView()) 添加这两个方法:onDestroy(),用于对 fragment 的状态进行最终清理,以及 onDetach (),将 fragment 分离到不再与其 Activity 相关联。

基本上,在幕后,它们没有相同的行为:使用 addToBackStack() fragment 保持实例化,而 detach() 则不然。

关于java - 在 FragmentTransaction 中使用 add().addToBackStack()、add().detach() 和 replace().addToBackStack() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13703881/

24 4 0
文章推荐: javascript - 电话间隙 : is it possible to detect swipeLeft and SwipeRight touch from Javascript?
文章推荐: java - Crudrepository/以只读方式将其他表中的单个字段连接到实体
文章推荐: java - 容器的投影,即将 List 转换为 List 的方法