为了账号安全,请及时绑定邮箱和手机立即绑定

add()、替换()和addToBackStack()之间的差异

add()、替换()和addToBackStack()之间的差异

墨色风雨 2019-06-28 16:05:14
add()、替换()和addToBackStack()之间的差异调用这些方法的主要区别是:fragmentTransaction.addToBackStack(name);fragmentTransaction.replace(containerViewId, fragment, tag);fragmentTransaction.add(containerViewId, fragment, tag);替换一个已经存在的片段,并将一个片段添加到活动状态,并将一个活动添加到后台堆栈,这意味着什么?第二,与findFragmentByTag(),是否搜索由add()/replace()方法或addToBackStack()方法?
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

1) fragmentTransaction.addToBackStack(str);

描述-将此事务添加到后台堆栈。这意味着事务提交后将被记住,并将在稍后从堆栈中弹出时反转其操作。

2) fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

描述-替换添加到容器中的现有碎片。这在本质上等同于对所有当前添加的片段调用Remove(片段),这些片段使用相同的容器ViewId添加,然后用这里给出的相同参数添加(int、片段、String)。

3) fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

描述-向活动状态添加片段。这个片段也可以有它的视图(如果Fragment.onCreateView返回非空)到活动的容器视图中。

替换已经存在的片段,将片段添加到活动状态并将活动添加到后台堆栈意味着什么?

有一个堆栈,其中保存处于运行状态的所有活动。碎片属于活动。因此,您可以添加它们以将它们嵌入到活动中。

您可以在单个活动中组合多个片段来构建多窗格UI,并在多个活动中重用一个片段。当您在不同的布局中定义了片段容器时,这基本上是非常有用的。您只需用任何布局中的任何其他片段替换即可。

当您导航到当前布局时,您将获得容器的id,以将其替换为所需的片段。

还可以使用popBackStack()方法。为此,您需要使用addToBackStack()然后commit()来反思。这是相反的顺序与电流在顶部。

FindFragmentByTag是否搜索添加/替换方法或addToBackStack方法添加的标记?

如果取决于您如何添加标记。然后,它只通过它以前定义的标记找到一个片段,无论是从XML中充气时还是在事务中添加时提供的。

参考资料:框架交易


查看完整回答
反对 回复 2019-06-28
?
白衣非少年

TA贡献1155条经验 获得超0个赞

另一个更重要的区别是addreplace是:replace移除现有片段并添加新片段。这意味着当您按下后退按钮时,将创建被替换的片段,并调用其onCreateView。鉴于add保留现有片段并添加一个新片段,这意味着现有片段将处于活动状态,并且不会处于“暂停”状态,因此当按回按钮onCreateView时,不会对现有片段调用该片段(添加新片段之前的片段)。关于片段的生命周期事件,在以下情况下将调用片段的生命周期事件:onResume、onCreateView和其他生命周期事件。replace但如果add.

编辑:如果她使用的是某种事件总线库,应该小心,比如绿色机器人的Eventbus并重用相同的片段,将该片段堆叠在其他通道的顶部。add..在这个场景中,即使您遵循最佳实践并在onResume并在onPause,事件总线在添加的片段的每个实例中仍然是活动的,如add片段不会调用这些片段生命周期方法中的任何一个。因此,片段的每个活动实例中的事件总线侦听器将处理相同的事件,这可能不是您想要的。


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 2681 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信