我有一个状态流,一旦 HTTP 请求随响应返回,该状态流就会发出一个值,该值将在 Activity 中显示为列表,我使用 Kotlin 协程在StateFlowViewModel 和 Activity 之间进行通信。
我正在使用这样的androidx生命周期函数:repeatOnLifecycle
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.successFlow.collect { binding.recyclerView.adapter = ExampleAdapter(it) }
}
}
Run Code Online (Sandbox Code Playgroud)
一开始工作正常,但后来我意识到,每次用户转到另一个屏幕并返回前一个屏幕时,状态流都会重新发出该值,在这种情况下,该值将丢失列表状态,例如,如果用户滚动到10列表中的项目,然后转到另一个屏幕并返回,列表将滚动到位置,0因为setAdapter再次调用该方法,而使用 时则不是这种情况LiveData。
现在我也需要处理StateFlow状态和配置状态,我尝试使用该distinctUntilChanged方法,但正如文档所述Applying 'distinctUntilChanged' to StateFlow has no effect。
这里的问题是我如何LiveData使用StateFlow.