原文: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。
如果您觉得文章还差了那么点东西,也请通过关注督促我写出更好的文章——万一哪天我进步了呢?