【发布时间】:2018-01-04 10:28:09
【问题描述】:
在Lifecycle 和LiveData 之前,Viewmodel 可以很容易地观察到它自己的 observables 的变化。只需订阅Observable* 的更改并对它们做出反应。然后可以使用双向绑定来立即对用户的输入做出反应。
在 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 的变化?
【问题讨论】:
-
@pskink 在 viewmodel 和 view 之间传播数据就足够了。我感兴趣的是捕捉数据的变化。例如,用户更改复选框状态,我想对此做出反应并执行操作。我该怎么做?
-
@pskink
LiveData.setValue如何让我获取信息,该用户在 UI 中更改了某些内容? -
@pskink 这没关系。 View 也可以手动设置它们,但我需要捕获 ViewModel 中的更改以立即对它们做出反应。如果不从 ViewModel 订阅 LiveData,我该怎么做?
-
@pskink 正如我所说,这无关紧要。 View 也可以从代码中手动设置 Livedata。重要的是我想听听 ViewModel 中的这些变化,以便我可以对它们做出反应。我该怎么做?
-
使用 mediatorlivedata
标签: android mvvm binding android-lifecycle android-livedata