Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 对复合对象的LiveData的更改_Android_Android Livedata - Fatal编程技术网

Android 对复合对象的LiveData的更改

Android 对复合对象的LiveData的更改,android,android-livedata,Android,Android Livedata,我想确保我正确理解何时调用LiveData的Observer的onChanged方法 假设我们有一个对象A,它有一些基本类型 (一些整数、一些字符串等)和对象B作为字段 我知道调用setValue时会调用onChanged。我很确定,当A的基本字段更改时,或者当我将对象字段重新分配给一个新实例时,它也会被调用,而当我更改B的任何字段时,它都不会被调用 如果我错了,请纠正我。 这些规则是否也适用于从文件室获取的LiveData对象? 是否存在调用onChanged的其他情况?事实上,只有在使用se

我想确保我正确理解何时调用
LiveData
Observer
onChanged
方法

假设我们有一个
对象A
,它有一些基本类型 (一些整数、一些字符串等)和
对象B
作为字段

我知道调用
setValue
时会调用
onChanged
。我很确定,当
A
的基本字段更改时,或者当我将对象字段重新分配给一个新实例时,它也会被调用,而当我更改
B
的任何字段时,它都不会被调用

如果我错了,请纠正我。 这些规则是否也适用于从文件室获取的
LiveData
对象?
是否存在调用
onChanged
的其他情况?

事实上,只有在使用
setValue()
postValue()
方法设置
LiveData
的包含值时,才调用
LiveData
onChanged
方法。没有任何机制可以观察由
LiveData
持有的对象内部的字段。因此,通过更改
object-a
中字段的值,不应通知观察者

另一方面,正如您所知,Room提供的查询db的方法能够返回
LiveData
,而不是
SomeType
。在引擎盖下,房间在查询的表上创建并注册一个,以了解其中的更改。因此,每次数据发生更改时,Room都会使用前面提到的
ContentObserver
得到通知,然后再次获取查询结果并将其发布到
LiveData