ArrayList的实时数据无法观察(Kotlin)?

时间:2020-06-07 07:37:59

标签: android kotlin android-livedata android-jetpack

我在我的项目中使用的是Android Jetpack组件ViewModel + Live数据之一,当使用常规数据(例如字符串和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)
    }
}

2 个答案:

答案 0 :(得分:3)

除非将LiveData的值完全用新值重新分配,否则它不会向观察者广播更新。这不会重新分配值:

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

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

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

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

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

答案 1 :(得分:0)

如果在主线程之外修改复杂的可观察对象,则需要使用 postValue

from ModuleAlpha import X