繁体   English   中英

Viewmodel观察LiveData - 怎么样?

[英]Viewmodel observing LiveData - how?

LifecycleLiveData之前,Viewmodel可以很容易地观察到它自己的observable的变化。 这只是订阅Observable*的变化并对它们做出反应的问题。 然后可以使用双向绑定立即对用户的输入做出反应。

在Android Studio Canary中,现在允许绑定到LiveData对象,前提是Binding知道其所有者的生命周期(ViewBinding现在有额外的setLifecycle方法), Android Studio Canary信息

您现在可以将LiveData对象用作数据绑定表达式中的可观察字段。 ViewDataBinding类现在包含一个新的setLifecycle方法,您需要将该方法用于观察LiveData对象。

但是, Viewmodel文档清楚地说明了:

ViewModel对象可以包含LifecycleObservers,例如LiveData对象。 但是,ViewModel对象绝不能观察到生命周期感知的可观察对象(例如LiveData对象)的更改。

(强调我的)

那么,如果ViewModel无法订阅它们,那么如何立即对LiveData更改做出反应呢?

而且, 为什么 Viewmodel无法观察到自己的LiveData的变化?

如果其中一个LiveData对象发生更改,则可以使用“ 转换”来调用操作。

例如,用户在Spinner选择一个人,并且您想要加载相应的人物对象。

MutableLiveData<Integer> personId = new MutableLiveData<>();
LiveData<Person> person = Transformations.switchMap(personId, id -> getPerson(id));

我使用MediatorLiveData修复了这个问题。 您可以按照以下步骤操作。

  1. 创建变量ex:result。

private final MediatorLiveData> result = new MediatorLiveData <>();

  1. 调用add source方法,其中第一个参数是livingata,第二个是观察者。

LiveData> observable = service.createItems();

result.addSource(observable,response - > {

 //Write code here 

}

您可以找到更多细节,因为基本要求几乎相同。 android livedata进行顺序调用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM