假设我希望将某个容器 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/