在 Lifecycle
和 LiveData
之前,Viewmodel可以很容易地观察到它自己的observable的变化 . 这只是订阅 Observable*
's changes and react to them. Then one might used a two-way binding to react immediately on user'输入的问题 .
在Android Studio Canary中,现在允许绑定到LiveData对象,前提是Binding知道其所有者的生命周期(ViewBinding现在有额外的 setLifecycle
方法),Android Studio Canary information:
您现在可以将LiveData对象用作数据绑定表达式中的可观察字段 . ViewDataBinding类现在包含一个新的setLifecycle方法,您需要使用该方法来观察LiveData对象 .
但是,Viewmodel documentation明确指出:
ViewModel对象可以包含LifecycleObservers,例如LiveData对象 . 但是,ViewModel对象绝不能观察到生命周期感知的可观察对象(例如LiveData对象)的更改 .
(强调我的)
那么,如果ViewModel无法订阅它们,那么如何立即对LiveData更改做出反应呢?
而且,为什么Viewmodel无法观察到自己的LiveData的变化?
2 回答
如果其中一个LiveData对象发生更改,则可以使用Transformations调用操作 .
例如 . 用户在
Spinner
中选择一个人,并且您想要加载相应的人物对象 .我使用MediatorLiveData修复了这个问题 . 您可以按照以下步骤操作 .
您可以找到更多细节,因为基本要求几乎相同 . android livedata make sequential call