gpt4 book ai didi

android - StateFlow 在后退导航中再次获取相同的数据

转载 作者:行者123 更新时间:2023-12-03 10:41:17 30 4
gpt4 key购买 nike

我正在使用 RecyclerView 并使用 Retrofit 从服务器获取数据。我正在使用 KotlinMVVM 设计模式。我使用过 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com