Android fragment : When to use hide/show or add/remove/replace?

标签 android android-fragments

假设我希望将某个容器 View 中的当前 fragment 替换为另一个。是不是用replace更好...

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, null);
    ft.commit();

...或以下,显示和隐藏?

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.hide(oldFragment);
    ft.show(newFragment);
    ft.commit();

有一种方法更有效吗?找不到有关何时使用这些方法或它们如何影响所涉及 fragment 的生命周期的太多信息。 谢谢!

最佳答案

您应该考虑您计划对 fragment 执行的操作,以决定遵循哪条路径。如果你使用 FragmentTransaction 来隐藏 Fragment,那么它仍然可以处于其生命周期的运行状态,但它的 UI 已经与窗口分离,因此不再可见。因此,从技术上讲,您仍然可以与 fragment 交互,并在以后需要时重新附加其 UI。如果您替换 fragment ,您实际上是将其从容器中拉出,它将经历生命周期中的所有拆卸事件(onPause、onStop 等),如果由于某种原因您再次需要该 fragment ,您将不得不将其重新插入容器并让它再次运行所有初始化。

如果您很有可能再次需要该 fragment ,则只需将其隐藏,因为重绘其布局比完全重新初始化它的成本更低。

关于Android fragment : When to use hide/show or add/remove/replace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149446/

相关文章:

android - 如何通过为每个页面中继背景图像来实现 android view pager?

android - 使用 Rxjava 从通知到 Fragment?

java - 无法启动 Activity ComponentInfo : Error inflating class android. support.design.widget.CoordinatorLayout

android - Android listview 中的自定义 Adapter 有很多 if

android - 如何将页脚 View (TextView)添加到 ListView 的末尾?

android - FragmentTransaction 替换方法无法正常工作

java - 由于构造函数错误无法启动 ListView

java - 如何在 ListFragment 上实现拉取刷新

android - 如何在 SurfaceView 中动态改变图像?

android - RxJava2 : How to get a dedicated background thread for work