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

标签 android kotlin mvvm

我正在使用 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/

相关文章:

java - 在 Leiningen (Clojure) for Android 中设置 JavaVersion sourceCompatibility(Java 1.7 vs 1.8)

android - GPS 位置波动

用于安装字体的 Android 应用程序

android 在应用程序/Activity 中嵌入默认音频播放器

python-3.x - Kotlin 中的嵌套理解

wpf - MVVM Linq2Sql 和 DataContext

android - 为什么只有第一行显示使用 Recyclerview gridlayoutmanager

kotlin 字段 foo 和 isFoo 冲突 : The following declarations have the same JVM signature

extjs 数据绑定(bind) ViewModel 和网格不起作用

c# - 绑定(bind)到内部属性?