我在我的项目中使用 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/