【问题标题】:Android: Transformations.switchMap not triggered when quick callAndroid:快速调用时未触发 Transformations.switchMap
【发布时间】:2021-05-17 15:16:15
【问题描述】:

我正在尝试学习 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]
...

由于某种原因,第一个被取消/忽略。我做错了什么?

【问题讨论】:

    标签: android android-livedata kotlin-coroutines android-jetpack


    【解决方案1】:

    LiveData 是一个状态持有者,它旨在服务于这个目的。所以它保证所有活跃的(状态至少为STARTED)的观察者最终会收到这个LiveData的最新值,但所有的中间值都可以合并。如果您需要在不合并的情况下传递所有发布的值,则应使用另一个抽象 - 例如kotlin channel

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2020-11-06
      相关资源
      最近更新 更多