我在我的项目中使用的是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)
}
}
答案 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