假设我希望将某个容器视图中的当前片段替换为另一个。使用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();
是不是有一种方法更有效?我找不到太多关于何时使用这些方法的信息,或者它们如何影响所涉及片段的生命周期。谢谢!
发布于 2012-11-02 04:32:40
您应该考虑计划如何处理片段,以确定要遵循哪条路径。如果您使用FragmentTransaction来隐藏片段,那么它仍然可以处于其生命周期的运行状态,但是它的UI已经与窗口分离,因此它不再可见。因此,从技术上讲,您仍然可以与片段交互,并在以后需要重新附加它的UI。如果你替换这个片段,你实际上是将它从容器中拉出来,它将经历生命周期中的所有teardown事件(onPause,onStop等),如果你出于某种原因再次需要那个片段,你必须将它插入到容器中,让它再次运行它的所有初始化。
如果您很有可能再次需要该片段,那么只需隐藏它,因为重新绘制它的布局比完全重新初始化它的操作成本更低。
发布于 2012-10-31 08:47:31
你基本上是自己回答的。如果你想替换(所以不再需要旧的片段),使用replace()
,如果你想暂时隐藏它,那么使用hide()
。
发布于 2018-12-25 13:24:29
我在我的活动中使用了hide/Show方法,用了4个片段,解决了我的解决方案,但是当我随机地显示我的对话框时,当我使用add和replace方法时,它给出了窗口坏的令牌异常,然后没有出现坏的令牌异常,所以我认为显示/隐藏方法是不完美的
https://stackoverflow.com/questions/13149446
复制相似问题