2016-09-29 64 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可以輕鬆處理。 –