调用这些方法的主要区别是什么:
fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);
替换已经存在的fragment,将fragment添加到activity状态,将activity添加到back stack是什么意思?
其次,使用 findFragmentByTag()
,是否搜索由 add()
添加的标签?/replace()
方法或 addToBackStack()
方法?
最佳答案
add
和 replace
之间另一个重要的区别是:
replace
移除现有 fragment 并添加新 fragment 。这意味着当您按下返回按钮时,将创建被替换的 fragment ,并调用其 onCreateView
。而 add
保留现有 fragment 并添加一个新 fragment ,这意味着现有 fragment 将处于 Activity 状态并且它们不会处于“暂停”状态,因此当按下后退按钮时 onCreateView
是不调用现有 fragment (添加新 fragment 之前的 fragment )。
对于fragment的生命周期事件onPause
、onResume
、onCreateView
等生命周期事件会在的情况下被调用替换
,但在add
的情况下它们不会被调用。
编辑:如果她正在使用某种事件总线库,例如 Greenrobot's Eventbus,则应该小心。并通过 add
重用相同的 fragment 以将 fragment 堆叠在其他 fragment 之上。在这种情况下,即使您遵循最佳实践并在 onResume
中注册事件总线并在 onPause
中取消注册,事件总线仍将在添加 fragment 的每个实例中处于 Activity 状态因为 add
fragment 不会调用这些 fragment 生命周期方法中的任何一个。结果, fragment 的每个 Activity 实例中的事件总线监听器将处理可能不是您想要的相同事件。
关于android - add()、replace() 和 addToBackStack() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634207/