使用来自MutableStateFlow<List<MyDataObject>>()的数据对象字段值的Android更新活动 [英] Android update activity with value of data object field from MutableStateFlow<List<MyDataObject>>()

本文介绍了使用来自MutableStateFlow<List<MyDataObject>>()的数据对象字段值的Android更新活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我更改用于显示下载进度条的对象中的某个字段的值时,从viewModel()可靠地更新我的Activity/UI层时遇到了问题。该活动可以很好地观察到向列表添加对象和从列表中删除对象,但不会更改进度字段。

数据类

data class DownloadObject(
   val id: String?,
   var progress: Float,
)

视图模型

class MyViewModel () : ViewModel() {

   private val _progressList = MutableStateFlow<List<DownloadObject>>(emptyList())
   val progressList: StateFlow<List<DownloadObject>>
       get() = _progressList

   //add to list updates the activity
   _progressList.value += DownloadObject

   //remove from list updates the activity
   _progessList.value -= DownloadObject

   // Change progress field doesn't update the activity
   _progressList.value.onEach{
       if(it.id == id) {it.progress = progress}
   }
}

活动

val progressList by courseViewModel.progressList.collectAsState(emptyList()
...
LinearProgressIndicator(progress = progressList.find { it.id == id }?.progress)

我尝试使用mutableStateListOf()MutableLiveData,但遇到许多相同的问题。我已经把两个州的代码实验室都用来合成了,真的不确定从这里做什么。非常感谢您的帮助,谢谢!

推荐答案

// Change progress field doesn't update the activity
   _progressList.value.onEach{
       if(it.id == id) {it.progress = progress}
   }
这实际上不会在progressListStateFlow中触发更新。 要做到这一点,您可能需要使用如下代码:

_progressList.value = progressList.value.map {
    if(it.id == id) {
        it.copy(progress = progress)
    } else {
        it
    }
}

这篇关于使用来自MutableStateFlow&lt;List&lt;MyDataObject&gt;&gt;()的数据对象字段值的Android更新活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆