2

目前我正在研究使用 RxJava 和 RxBinding 来观察视图变化的项目。它对于我们可以轻松访问生命周期事件的片段和活动非常有效 - 因为建议我们绑定到数据流 ononResume和 unbind on onPause

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

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

然而,我的一位同事建议使用事件总线,它将用于将事件中的订阅传递给活动/片段,在那里它们将被添加到 CompositeSubscription 并且所有这些都将一起取消订阅。此外,当用户返回时,我们可以通知视图持有者自己订阅。

您如何看待这种方法?在这种方法中是否有任何我应该注意的陷阱?

4

1 回答 1

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

记住:你不应该将 RxJava 应用到每个问题上。

于 2016-09-29T17:40:43.373 回答