Binding/Unbinding 带有 ViewPager 的 onViewCreated()/onDestroyView() 中的 EventBus

Binding/Unbinding EventBus in onViewCreated()/onDestroyView() with a ViewPager

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

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

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

如果 Fragment 的视图实际上被销毁,当用户导航回 Fragment 时,它的 onViewCreated() 方法将触发从最新数据重绘整个 Fragment 的视图。所以这两种情况都被有效地涵盖了,视图仍然存在(并且它被更新)的情况,以及没有视图并且必须绘制新视图的情况。

因此,我没有发现我的计划有任何漏洞,但是,我从未见过有人讨论过这种方法。我不应该这样做有什么不好的理由吗?或者这只是一个非常具体的设计的好解决方案?

感谢您的专业知识!

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

顺便说一句,对于任何读到这篇文章的人来说,不同的情况有不同的做法。对于 Activity 实例,通常使用 onStart 和 onStop 来注册和注销侦听器,但您仍然需要了解通过总线的事件流,看看它是否仍然有意义。