让我们把它简单化。我MutableSharedFlow
在sortOrder
我的ViewModel
.
private val sortOrder = MutableSharedFlow<String>(
replay = 0,
extraBufferCapacity = 1
)
每当更改时,我都会mapLatest
连接到sortOrder
刷新数据。sortOrder
val data = sortOrder.mapLatest {
Timber.d("Sort order changed to $it")
"Sort order is $it"
}
我有一个观察者在听data
活动。
viewModel.data.asLiveData().observe(this) {
Timber.d("onCreate: New data is $it")
}
最后,我改变了sortOrder
inViewModel
的init
方法
init {
sortOrder.tryEmit("year")
}
但即使在更改sortOrder
值之后,mapLatest
也不会被触发。知道为什么吗?
我MutableSharedFlow
用来控制replay
属性以防止mapLatest
每次旋转屏幕(或重新创建活动时)时执行主体。
完整的源代码
- 完整活动:TestActivity.kt
- 完整视图模型:TestViewModel.kt
PS:我是 Flow API 的新手