【发布时间】:2019-07-10 04:34:57
【问题描述】:
我的视图模型中有这样的MutableLiveData:
val liveData = MutableLiveData<ArrayList<*>>()
我将端点调用的结果添加到此LiveData,如下所示:
liveData.value?.addAll(myList)
据我所知,MutableLiveData 不应该通知它是 Observers,除非您在其上执行 setValue 或 postValue 但此时当我的代码运行时,Observers 会收到通知变化。
这怎么可能?
更新:
我遇到了一个更奇怪的行为,这个测试通过了,但是列表被打印了一次:[]
@Test
fun `strange live data behavior`() {
val myLiveData = MutableLiveData<ArrayList<Int>>()
val observer = mock() as Observer<ArrayList<Int>>
myLiveData.observeForever(observer)
myLiveData.observeForever { println(it) }
myLiveData.value = ArrayList()
verify(observer).onChanged(ArrayList())
myLiveData.value?.addAll(listOf(1, 2, 3, 4))
val result = ArrayList<Int>()
result.add(1)
result.add(2)
result.add(3)
result.add(4)
verify(observer).onChanged(result)
}
【问题讨论】:
-
还有一种情况是通知
Observer。当Observer附加到LiveData并且LiveData已经包含一个值时,Observer将立即收到通知。 -
是的,但即使在那之后也会发生这种情况
-
@SanlokLee 我已经用更多信息更新了问题
-
我明白你现在的意思了。我会尽快附上答案。
标签: kotlin android-livedata mutablelivedata