目前我正在做一个使用RxJava和RxBinding来观察视图变化的项目。对于我们可以轻松访问生命周期事件的片段和活动,它工作得非常好-因为建议我们在onResume
上绑定数据流并在onPause
上解绑定。
最近我们引入了RecyclerView,它可以显示视图列表,所有视图都可以是我们想要订阅的数据流。我面临的问题是在创建时将compositessubscribe对象从活动/片段通过适配器传递给视图持有人。当然,当用户离开屏幕并返回时(onPause
和onResume
正在被调用),ViewHolders不会被重新创建。
解决方案是使适配器、布局管理器(以访问现有的视图持有人)具有生命周期意识,但这需要我们编写额外的代码来在逻辑层之间传递这些订阅引用。
然而,我的一个同事建议使用事件总线,它将用于将事件中的订阅传递给活动/片段,在那里它们将被添加到compositesubsubscription,并且所有它们将一起取消订阅。此外,我们可以通知视图持有人在用户返回时订阅自己。
你觉得这个方法怎么样?在这种方法中,有什么我应该注意的陷阱吗?
- 不要让你的视图生命周期感知。这违反了关注点分离。
- 在适配器的viewBind上使用clickListeners。
- 不要将订阅传递给适配器。(适配器不需要知道它,也不需要控制它的生命周期)适配器可以只提供一个rx端点,您在(例如)活动onStart中订阅并在onStop中取消订阅。然后,适配器可以将项目上的点击事件编组到
Observable
中。
请记住:您不应该将RxJava应用于所有问题