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

nir*_*rma 2 android kotlin android-livedata android-jetpack

我在项目中使用 Android Jetpack 组件 ViewModel + 实时数据之一,当使用字符串和 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

Dou*_*son 5

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

dataObservable.value!![i] = dataObservable.value!![i].plus(1)
Run Code Online (Sandbox Code Playgroud)

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

如果您想重新分配一个新的数组值并通知所有观察者,请完全重新分配一个新数组,如下所示:

dataObservable.value = dataObservable.value!![i].plus(1)
Run Code Online (Sandbox Code Playgroud)

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