2016-09-29 28 views
2

目前我正在使用RxJava和RxBinding一起观察视图更改的项目。它的工作真的很好的片段和活动,我们很容易接触到生命周期事件 - 因为它的建议,我们绑定到数据流上onResume和取消绑定的。使用事件总线传递RxJava订阅

最近我们介绍了RecyclerView,它显示视图列表,它们都可以是我们想要订阅的数据流。我面临的问题是将活动/片段中的CompositeSubscription对象通过适配器向下传递,以在创建时查看持有者。当然,它不起作用当用户离开屏幕并返回时,不会重新创建ViewHolders(调用和onResume)。

解决方案是让适配器,布局管理器(以访问现有的视图持有者)生命周期感知,但它需要我们编写额外的代码来在逻辑层之间传递这些订阅参考。

但是我的一位同事提议使用事件总线,它将用于将事件中的订阅传递给活动/片段,并将它们添加到CompositeSubscription中,并且所有这些将一起取消订阅。此外,我们可以通知查看持有者在用户返回时自行下订单。

您对这种方法有什么看法?在这种方法中我应该注意哪些缺陷?

回答

2
  1. 不要让您的视图生命周期意识到。这违反了关注点的分离。
  2. 只需在适配器的viewBind中使用clickListeners。
  3. 不要将订阅传递给适配器。 (适配器不需要知道它,也不需要控制它的生命周期)适配器可以提供您在(例如)Activity onStart中订阅的Rx端点,并在onStop中取消订阅。然后,Adapter可以将物品上的点击事件编组处理为Observable

记住:您不应该将RxJava应用于每个问题。

+0

通过“视图显示列表和所有的人都可以是数据流,我们想订阅”我的意思观点持有者更复杂一点,然后只是简单的点击美景 - 他们可以是如编辑文本视图。而且我提出不违反任何你所提到的点 - 订阅将事件传递从ViewHolder到活动/片段,所以它不会是生命周期知道,我们不会通过订阅适配器 - 适配器将不会了解这些订阅。 –

+0

而BTW对我们有什么,我认为RxJava是最好的解决方案 - 多种数据源(视持有人)发出一个需要进行组合和节流数据 - RxJava可以轻松处理。 –