2017-07-15 88 views
0

最近我一直在開發一些功能,在我看來,它將很好地用某種形式的雙向綁定建模。Android上與RxJava的雙向綁定

例如:有一個屏幕,用戶可以填寫一些表格並保存一些內容。稍後用戶可以回到該內容並對其進行編輯。內容存儲在數據庫中,因此內容應該異步獲取。我使用RxJava和Mosby MVP在片段和演示者之間創建MVVM樣式的連接。

問題是表單應該在運行中進行驗證,所以任何時候都應該通知View的某些部分更改Presenter。但是,當來自數據庫的異步內容到達時(在用戶正在編輯現有內容的情況下),由於狀態之間的轉換,視圖可能會損壞數據庫的「初始」狀態。此外,視圖和主持人之間存在無限事件傳遞週期的風險(distinctUnitChanged()並不總是對此有幫助,因爲狀態可能會改變爲1-2-1-2-1)

我找到了2種解決方法,但是我我不滿意他們,因爲他們不純潔,不喜歡慣用的玻璃鋼。

第一種方法是改變視圖,直到它從演示者接收到第一個狀態爲止不發送事件。

第二個需要犧牲Presenter純度。呈現是設置一個標誌,告訴我們是否應該接受視圖的狀態改變。它將從視圖中跳過事件,直到它將接收到它傳遞給視圖的事件(初始狀態)。

事情變得更加困難,因爲在Android視圖中可以隨時斷開連接並重新連接到Presenter(有或沒有保存狀態),Presenter應該是事實的根源。

如果有人有任何使用RxJava的雙向綁定實現或任何想法的例子,我將不勝感激。

回答

0

考慮在從數據庫加載異步內容作爲switchMap()時,使用swichMap()(而不是flatMap())在用戶更改表單時取消訂閱以前的輸入驗證。

可能這可以解決您的問題。

Btw。看起來Mosby MVI模塊更適合作爲傳統的MVP來實現你想要實現的功能(RxJava,雙向綁定)。

+0

我使用switchMap(),但它不能解決我的問題,因爲我的問題是視圖狀態不能立即設置,並在該過渡視圖狀態不正確。我很樂意使用別的東西,但已經太遲了,決定不是我的。 – charlag