我有一个状态流,在HTTP请求返回响应后会发出一个值,该值将显示为Activity中的列表,我正在使用Kotlin coroutines 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
方法,但文档中说将'distinctUntilChanged'应用于StateFlow没有效果
。
问题是如何使用StateFlow
实现相同的LiveData
行为。