添加到包含在 livedata 中的列表并将元素添加到该列表

adding to a list that is contained in livedata and adding elements to that list

添加到包含在 livedata 中的列表并向该列表添加元素

val resourcesLiveData by lazy { MutableLiveData<List<File>>() }
    

我认为这应该可行,因为我的 LiveData 是一个文件列表,我只想向其中添加元素。但是实时数据的值始终是一个空列表。 res 是我要添加的不同文件资源

resourceLiveData.value?.toMutableList()?.add(res) 
                

所以我使用这个版本尝试了更多,但列表仍然是空的

val listOfRes = resourceLiveData.value ?: emptyList()
listOfRes.toMutableList().add(res)
resourceLiveData.value = listOfRes.toList()
                

谁能看看我做错了什么。

只想添加到 value

中包含的列表

您正在通过调用 toMutableList() 而不是更新原始对象来创建新对象。

将您的 LiveData 类型更改为 MutableList:

val resourcesLiveData by lazy { MutableLiveData<MutableList<File>>() }

然后,相应地更新值:

resourceLiveData.value?.add(res) 

同意@KeyserSoze 的回答,如果你只需要使用 List 那么你可以按照下面的方法做

resourceLiveData.value = resourceLiveData.value?.toMutableList()?.apply { add(res) }?: emptyList()