【发布时间】:2021-10-17 05:21:39
【问题描述】:
当我更改用于显示下载进度条的对象中的字段值时,我无法可靠地从viewModel() 更新我的活动/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,但遇到了许多相同的问题。我已经将两个州代码实验室都用于撰写,但我真的不知道从这里做什么。非常感谢任何帮助,谢谢!
【问题讨论】:
-
如果您希望您的问题得到解答,您需要让专家尽快获得具有可重现问题的工作样本。完美地,我应该将您的代码粘贴到我的示例项目中,并在我运行它时尽快看到问题。在您的情况下,我不知道您如何存储/更改
id以及为什么find可能不会以任何原因返回null
标签: android android-activity android-livedata android-jetpack-compose android-viewmodel