原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION
作者:Hannes Dorfmann
譯者:卻把清梅嗅
在上一篇部落格中,我們探討了協調模式是如何在Android
中應用的。這次我想展示如何在Model-View-Intent
中使用它。
如果您還不知道協調器模式是什麼,我強烈建議您回過頭來閱讀上文內容。
在MVI
中應用此模式與MVVM
或MVP
沒有太大區別:我們將lambda作為導航的回撥傳遞給我們的MviBasePresenter
。有趣的是我們如何在狀態驅動的架構中觸發這些回撥?我們來看一個具體的例子:
class FooPresenter(
private var navigationCallback: ( () -> Unit )?
) : MviBasePresenter<FooView> {
lateinit var disposable : Disposable
override fun bindIntents(){
val intent1 = ...
val intent2 = ...
val intents = Observable.merge(intent1, intent2)
val state = intents.switchMap { ... }
// 這裡就是有趣的部分
val sharedState = state.share()
disposable = sharedState.filter{ state ->
state is State.Foo
}.subscribe { navigationCallback!!() }
subscribeViewState(sharedState, FooView::render)
}
override fun unbindIntents(){
disposable.dispose() // disposable 導航
navigationCallback = null // 避免記憶體洩漏
}
}
複製程式碼
其思想是:通過RxJava
的 share() 操作符,我們對通常用來對View
層渲染狀態的Observable
進行復用,再加上通過與 .filter() 操作符的組合使用,達到能夠監聽到確定的狀態,這之後,當我們觀察到該狀態時,觸發對應的導航操作,然後協調器模式就像我之前的部落格文章中描述的那樣進行工作。
系列目錄
《使用MVI打造響應式APP》原文
《使用MVI打造響應式APP》譯文
《使用MVI打造響應式APP》實戰
關於我
Hello,我是卻把清梅嗅,如果您覺得文章對您有價值,歡迎 ❤️,也歡迎關注我的部落格或者Github。
如果您覺得文章還差了那麼點東西,也請通過關注督促我寫出更好的文章——萬一哪天我進步了呢?