Android碎片:何时使用隐藏/显示或添加/删除/replace?

假设我希望在另一个容器视图中replace当前片段。 使用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(); 

是这样做更有效的方法之一? 找不到关于何时使用这些方法的很多信息,或者它们如何影响碎片的生命周期。 谢谢!

你应该考虑你打算如何处理这个片段,以决定遵循哪条path。 如果使用FragmentTransaction来隐藏片段,那么它仍然处于其生命周期的运行状态,但其UI已经从窗口中分离出来,因此不再可见。 所以你可以在技术上仍然与片段进行交互,并在以后需要时重新连接UI。 如果你replace了这个片段,你实际上将它从容器中拉出来,并且它会经历生命周期中的所有拆卸事件(onPause,onStop等),如果由于某种原因你又需要这个片段,你将不得不将它插回到容器中,让它再次运行所有的初始化。

如果再次需要该片段的概率很高,那么只需将其隐藏起来,因为重新绘制布局的操作比重新初始化操作要便宜。

你基本上回答自己。 如果你想replace(如此旧的片段不再需要replace()如果你想临时隐藏它,使用replace()然后做hide()