Spo*_*ook 8 binding android mvvm android-lifecycle android-livedata
在之前Lifecycle和之前LiveData,Viewmodel可以很容易地观察到它自己的观察者的变化.这只是订阅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的变化?
我使用MediatorLiveData. 您可以按照以下步骤操作。
创建一个变量(例如结果)。
private final MediatorLiveData<Resource<RequestType>> result = new MediatorLiveData<>();
Run Code Online (Sandbox Code Playgroud)调用addSource方法,其中第一个参数是LiveData观察者,第二个参数是观察者。
LiveData<Resource<EmptyResponse>> observable = service.createItems();
result.addSource(observable, response -> {
//Write code here
}
Run Code Online (Sandbox Code Playgroud)另请参阅此 SO 答案。基本要求几乎相同。
如果您的 LiveData 对象之一发生更改,您可以使用转换来调用操作。
例如,用户在 a 中选择一个人Spinner,并且您想要加载相应的人对象。
MutableLiveData<Integer> personId = new MutableLiveData<>();
LiveData<Person> person = Transformations.switchMap(personId, id -> getPerson(id));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |