如何暂停/恢复片段

背景:我写了一个自定义容器,可以容纳三个片段。 取决于这个容器的状态,只有两个或那三个碎片是可见的。 为了通知片段他们的可见性被改变,我尝试了两个select:

  1. 我用相应的值调用了Fragment.setUserVisibleHint()方法。 托pipe片段覆盖此方法,并作出适当的反应。 这解决了。

  2. 我调用了FragmentTransaction.hide()和FragmentTransaction.show()方法来隐藏和显示片段。 托pipe片段覆盖Fragment.onHiddenChanged()并根据需要作出反应。 这也成功了。

我的问题是,我不满意这些选项。 我想把不可见的片段放入标准的暂停状态。 这个选项的好处是我保持代码干净和简单,因为我不需要重写任何特殊的方法(如setUserVisibleHint()onHiddenChanged() ),我可以处理所有onPause()onResume()已经实施。

问题:将片段放入暂停状态然后从该状态恢复的正确方法是什么?

更新:我也尝试了FragmentTransaction.detach() 。 这不是一个select,因为它破坏了我的情况不允许的视图。

Solutions Collecting From Web of "如何暂停/恢复片段"

听起来就像你想调用FragmentTransaction#attach和FragmentTransaction#detach ,把你的片段放入与FragmentPagerAdapter相同的生命周期例程中。

detach() Fragment将通过onPauseonStop和最终的onDestroyView生命周期方法,然后当你用attach()重新附加它将通过onCreateViewonStart和最后onResume生命周期方法。

你必须确保你使用的标签和容器id一样好,因为你可以将多个片段附加到一个容器中,你必须能够从FragmentManager获得Fragment引用,然后必须通过它标签。