【发布时间】:2021-09-08 11:06:57
【问题描述】:
我有一个状态流,一旦 HTTP 请求与响应一起返回,就会发出一个值,该值将在 Activity 中显示为列表,我正在使用 Kotlin 协程 StateFlow 在 ViewModel 和 Activity 之间进行通信。
我正在使用androidx生命周期repeatOnLifecycle这样的函数:
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.successFlow.collect { binding.recyclerView.adapter = ExampleAdapter(it) }
}
}
这在开始时工作得很好,但后来我意识到每次用户转到另一个屏幕并返回到前一个屏幕时,状态流都会重新发送在这种情况下会丢失列表状态的值,例如,如果用户滚动到列表中的项目10,然后转到另一个屏幕并返回列表将滚动到位置0,因为再次调用setAdapter 方法,使用LiveData 时不是这种情况。
现在我还需要处理StateFlow 状态和配置状态,我尝试使用distinctUntilChanged 方法,但正如文档中所说的Applying 'distinctUntilChanged' to StateFlow has no effect。
这里的问题是如何使用StateFlow 实现相同的LiveData 行为。
【问题讨论】:
标签: android kotlin kotlin-coroutines kotlin-flow