2016-03-08 187 views
0

我正在利用FragmentPagerAdapter管理带有4个选项卡的ViewPager,我还利用EventBus监视选项卡之间的更改。这些标签全都相关,因为它们可以添加应该在另一个标签中更新的内容。使用ViewPager在onViewCreated()/ onDestroyView()中绑定/解除绑定EventBus

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

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

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

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

您的专业知识感谢!

回答

1

我以前做过类似的事情。通常的做法是在视图的生命周期中使用事件总线,以便在相关时尽可能管理其显示。问题是在之前注册了一个听众该视图实际上是可用的,并且在之后注销它不再被使用,这听起来像你没有做的。

顺便说一句,对于任何人来说,对于不同的情况有不同的做法。对于Activity实例,通常使用onStart和onStop来注册和取消注册监听器,但是您仍然需要了解通过总线进行的事件流程,以确定它是否有意义。

+0

感谢道格,给了我信心我没有做一些荒谬的事情。我很高兴你提到onStart(),onStop(),所有的例子都使用这个,我相信它在活动中是有意义的,但用4个片段和onStop onStart投掷ViewPager会导致你错过一吨的更新。反过来,您必须管理粘滞事件,或者您必须更新数据模型并每次使用更多CPU时间重新绘制屏幕。 感谢您的建议! – AutoM8R