如何解决对复合对象的LiveData的更改
我想确保自己正确理解何时调用onChanged
的{{1}}的{{1}}方法。
假设我们有一个LiveData
,其中有一些原始类型
(一些整数,一些字符串等)和一个Observer
作为字段。
我知道在我致电object A
时会呼叫object B
。我很确定在onChanged
的原始字段更改时,或者在将对象字段重新分配给新实例时,也会调用它,并且在更改setValue
中的任何一个时都不会调用它的字段。
如果我错了,请纠正我。
这些规则还适用于从Room提取的A
对象吗?
还有其他情况下调用B
吗?
解决方法
事实是,onChanged
的{{1}}的{{1}}方法仅在使用{{1}设置LiveData
的包含值时才调用}或Observer
方法。没有机制可以观察由LiveData
持有的对象内部的字段。结果,通过更改setValue()
内部的字段的值,不应通知观察者。
另一方面,如您所知,Room提供的用于在数据库上查询的方法能够返回postValue()
而不是LiveData
。在后台,Room会在您的查询表上创建并注册一个ContentObserver
,以了解其中的更改。因此,每次数据发生更改时,Room都会使用提到的object-A
得到通知,然后再次获取查询结果并将其发布到LiveData<SomeType>
上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。