我正在跟踪Kaushik Gopal使用ViewStates Observable和ViewEffects Observable实现MVI。示例可以在这里看到:https://github.com/kaushikgopal/movies-usf/blob/master/app/src/main/java/co/kaush/msusf/movies/MSMovieVm.kt
相关代码段:
init {
eventEmitter
.doOnNext { Timber.d("[Event]: $it") }
.eventToResult()
.doOnNext { Timber.d("[Result]: $it") }
.share()
.also { result ->
viewStates = result
.resultToViewState()
.doOnNext { Timber.d("[ViewState]: $it") }
.replay(1)
.autoConnect(1) { disposable = it }
.distinctUntilChanged()
viewEffects = result
.resultToViewEffect()
.doOnNext { Timber.d("[ViewEffect]: $it") }
}
}
主要区别在于我使用的是“片段”而不是“活动”。一切都在第一次运行,但是当我从片段A转到片段B,然后回到片段A时,可观察到的结果触发新的ViewState,但是没有新的ViewEffects。我应该有一种特殊的订阅/退订方式,还是以一种奇怪的方式构造rx链?我目前在onViewCreated()
中同时订阅了ViewStates和ViewEffects Observables,并在onViewDestroyed()
中进行了处置。我已经验证了两种Observables在每种情况下都已订阅,只是当我回到Fragment A并输入新的ViewEvents时,我得到了新的ViewState,但没有ViewEffects。也许是多播问题?