我正在使用 RecyclerView 并使用 Retrofit 从服务器获取数据。我正在使用 Kotlin 和 MVVM 设计模式。我使用过 LiveData,它运行良好。但是当我们导航到另一个 fragment 并再次返回到同一 fragment 时,Stateflow 会导致问题。它只是再次获取相同的数据。下面是 ViewModel 和观察者的代码:
//查看模型
private val _allTimeSheetsResponse =
MutableStateFlow<ResponsesResult<AllTimeSheetsResponse>>(ResponsesResult.Empty)
val allTimeSheetsResponse : StateFlow<ResponsesResult<AllTimeSheetsResponse>> get() = _allTimeSheetsResponse
fun getAllTimeSheets(auth: String) =
viewModelScope.launch {
timeSheetsRepository.getAllTimeSheets(auth).collect {
_allTimeSheetsResponse.value = it
}
}
//观察者
lifecycleScope.launchWhenStarted{
timeSheetsViewModel.allTimeSheetsResponse.collect { timeSheetsResponse ->
when (timeSheetsResponse) {
is ResponsesResult.Loading -> binding.progressBarLayout.show()
is ResponsesResult.Failure -> {
binding.progressBarLayout.gone()
binding.nothingFoundLayout.show()
handleApiError(timeSheetsResponse)
}
is ResponsesResult.Success -> {
binding.progressBarLayout.gone()
if (timeSheetsResponse.value.payload.isNotEmpty()) {
showAllTimeSheetsRecyclerAdapter.submitList(timeSheetsResponse.value.payload)
} else {
binding.nothingFoundLayout.show()
}
}
else -> Unit
}
}
}
最佳答案
因为您多次调用 getAllTimeSheets
(例如 onCreateView 或
onViewCreated)。尝试在第一次访问
allTimeSheetsResponse` 时调用它。
关于android - StateFlow 在后退导航中再次获取相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66102473/