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

标签 android android-fragments

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

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

替换已经存在的fragment,将fragment添加到activity状态,将activity添加到back stack是什么意思?

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

最佳答案

addreplace 之间另一个重要的区别是:

replace 移除现有 fragment 并添加新 fragment 。这意味着当您按下返回按钮时,将创建被替换的 fragment ,并调用其 onCreateView。而 add 保留现有 fragment 并添加一个新 fragment ,这意味着现有 fragment 将处于 Activity 状态并且它们不会处于“暂停”状态,因此当按下后退按钮时 onCreateView 是不调用现有 fragment (添加新 fragment 之前的 fragment )。

对于fragment的生命周期事件onPauseonResumeonCreateView等生命周期事件会在的情况下被调用替换,但在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/

相关文章:

android - 如何检测当前正在使用的 fragment

android - 在两个 fragment 之间传递数据类

android - 多个 Java fragment 使用的 Asynctask

java - Android Webview 输入文件选择器代码错误

android,主屏幕上的网络应用程序图标而不是通用图标,apple touche 图标 : apple-touch-icon-precomposed

java - Dalvik 中 'short' 字段所需的内存?

java - Android SDK 不会从 Eclipse 启动

android - 用 ViewPager 中的另一个 fragment 替换 fragment

android - 如何更改工具栏标题的字体?

android - ActionBar-PullToRefresh 与 ListView 和 Fragment