android - ArrayList 的实时数据未观察(Kotlin)?

标签 android kotlin android-livedata android-jetpack

我在我的项目中使用 Android Jetpack Component ViewModel + Live 数据之一,它在使用普通数据(例如 string 和 Int)时对我来说工作正常,但是当涉及到 arrayList 时,它不会观察到任何东西

这是我的代码

class MainActivityModel : ViewModel() {

    private var dataObservable = MutableLiveData<ArrayList<Int>>()

    init {
        dataObservable.value = arrayListOf(1,2,3,4,5)
    }

    fun getInt(): LiveData<ArrayList<Int>> = dataObservable

    fun addInt(i:Int) {
        dataObservable.value!![i] = dataObservable.value!![i].plus(1)
    }
}

最佳答案

LiveData 不会向观察者广播更新,除非它的值完全重新分配了一个新值。这不会重新分配值:

dataObservable.value!![i] = dataObservable.value!![i].plus(1)

它所做的是保留现有数组,但添加一个数组元素。 LiveData 不会通知它的可观察对象。必须重新分配实际的数组对象。

如果你想重新分配一个新的数组值并通知所有观察者,重新分配一个新的数组,就像这样:

dataObservable.value = dataObservable.value!![i].plus(1)

分配 dataObservable.value 将调用 LiveData setValue() 方法,并通知观察者传递给 setValue() 的新值。

关于android - ArrayList 的实时数据未观察(Kotlin)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62242274/

相关文章:

android - GPS 的 IsProviderEnabled 不起作用

java - 在 Volley 中设置 cookie

lambda - 转换任何类型的对象时未经检查的转换?在 kotlin 中变成 lambda

java - 使用 OpenCSV 解析 csv 文件时未找到类 "java.beans.Introspector"

安卓工作室 3 : Outdated Kotlin Runtime

java - 上传图片的更好方法是什么

android - 为什么 ListView 没有为正确的项目设置动画?

android-room - 从android Room Architecture Component中的多对多结构中获取LiveData

android - 为什么 LiveData.getValue 除非调用 observe 才会返回 null?

android - 具有共享偏好的 LiveData