ArrayList 的实时数据未观察(Kotlin)?
Live Data with ArrayList not observing (Kotlin)?
我在我的项目中使用 Android Jetpack Component ViewModel + Live data 之一,它在使用普通数据(例如 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()
的新值。
如果您在主线程之外修改您的复杂可观察对象,您需要使用 postValue
dataObservable?.value[i] += 1
dataObservable.apply {
postValue(value)
}
我在我的项目中使用 Android Jetpack Component ViewModel + Live data 之一,它在使用普通数据(例如 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()
的新值。
如果您在主线程之外修改您的复杂可观察对象,您需要使用 postValue
dataObservable?.value[i] += 1
dataObservable.apply {
postValue(value)
}