使用ViewPager在onViewCreated()/ onDestroyView()中绑定/解除绑定EventBus

时间:2016-03-08 01:40:20

标签: android android-fragments observer-pattern lifecycle

我正在利用FragmentPagerAdapter来管理带有4个标签的ViewPager,我还利用EventBus来监控标签之间的变化。这些选项卡都与之相关,因为它们可以添加应在另一个选项卡中更新的内容。

FragmentPagerAdapter的工作方式是滑动到另一个选项卡,它可以破坏前一个选项卡的视图(onDestroyView()似乎每次都必须释放内存时调用内存),但是,它通常不会破坏看来,它只是暂停片段。

这就是说,我正在使用MVP设计,我目前正在将onViewCreated()中的EventBus绑定到Presenter,然后在onDestroyView()中将其解绑。这允许来自另一个选项卡的事件立即反映在已被刷掉的前面的选项卡中(只要片段的视图仍然存在)。这消除了使用Sticky事件并适当管理它们的必要性。

如果Fragment的视图实际被破坏,当用户导航回Fragment时,它的onViewCreated()方法将从最新的数据中重新绘制整个Fragment的视图。因此,两种情况都得到有效覆盖,视图仍然存在(并且得到更新)的情况,以及没有视图的情况,并且必须绘制新视图。

因此,我没有看到计划中的任何漏洞,但是,我从未见过这种方法。是不是有一个非常糟糕的理由我不应该这样做?或者这只是一个非常具体的设计的好解决方案?

非常感谢您的专业知识!

1 个答案:

答案 0 :(得分:1)

我之前做过类似的事情。通常的做法是使用事件总线以及视图的生命周期,以便在与其相关时最好地管理它们的显示。问题是在视图实际可用之前注册一个侦听器,并且在之后取消注册它将不再被使用,这听起来像你没有做

BTW,对于阅读此内容的人来说,针对不同情况有不同的做法。对于Activity实例,通常使用onStart和onStop来注册和取消注册侦听器,但是你仍然需要了解通过总线的事件流,看看它是否仍然有意义。