add()、replace() 和 addToBackStack() 之间的区别

2023-12-08

调用这些方法的主要区别是什么:

fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);

替换已经存在的片段、将片段添加到活动状态以及将活动添加到返回堆栈意味着什么?

其次,与findFragmentByTag(),这是否搜索由添加的标签add()/replace()方法或addToBackStack() method?


之间还有一个重要的区别add and replace这是:

replace删除现有片段并添加新片段。这意味着当您按后退按钮时,将使用其替换的片段创建onCreateView被调用。然而add保留现有片段并添加一个新片段,这意味着现有片段将处于活动状态,因此当按下后退按钮时它们不会处于“暂停”状态onCreateView不会为现有片段(添加新片段之前存在的片段)调用。

从fragment的生命周期事件来看onPause, onResume, onCreateView以及其他生命周期事件将被调用replace但在以下情况下它们不会被调用add.

Edit:如果她使用某种事件总线库,例如Greenrobot 的 Eventbus并重用相同的片段将片段堆叠在其他通孔的顶部add。在这种情况下,即使您遵循最佳实践并将事件总线注册在onResume并注销onPause,事件总线在添加片段的每个实例中仍然处于活动状态,如下所示add片段不会调用这些片段生命周期方法中的任何一个。因此,片段的每个活动实例中的事件总线侦听器将处理相同的事件,这可能不是您想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

add()、replace() 和 addToBackStack() 之间的区别 的相关文章

随机推荐