我正在尝试学习MVI。我正在更新由转换开关映射观察到的状态事件实时数据。这是在我的视图模型中。
fun setStateEvent(event: StateEvent) {
Timber.d("SetStateEvent: [$event]")
_stateEvent.value = event
}
val dataState: LiveData<DataState<CustomViewState>> = Transformations.switchMap(_stateEvent) { stateEvent ->
Timber.d("Got state event [$stateEvent]")
stateEvent?.let {
handleStateEvent(it)
}
}现在,在我看来,我正在尝试执行两个操作:
viewmodel.setStateEvent(CustomStateEvent.ActionOne())
viewmodel.setStateEvent(CustomStateEvent.ActionTwo())以下是我的日志:
SetStateEvent: [CustomStateEvent$ActionOne]
SetStateEvent: [CustomStateEvent$ActionTwo]
Got state event [CustomStateEvent$ActionTwo]
...出于某种原因,第一个是被取消/忽略的。我做错了什么?
发布于 2021-05-29 19:23:11
LiveData是一个状态持有者,它就是为这个目的而设计的。因此,它保证所有active (状态至少为STARTED)观察者最终将收到此LiveData的最新值,但所有中间值都可以合并。如果您需要在不合并的情况下交付所有提交的值,则应该使用另一个抽象-例如kotlin channel。
https://stackoverflow.com/questions/67572465
复制相似问题