如何对livedata对象进行数据绑定(android) [英] How to databind livedata object (android)
问题描述
今天,我对android上的mvvm和数据绑定有一些疑问,
Today I've some question about mvvm and databinding on android,
我正在尝试在视图上绑定对象属性.
I'm trying to bind object properties on view.
我有一个带有某些属性的对象(模型),例如:
I've an Object (Model) with some properties, by example :
public String name;
public String title;
public int value;
我有一个带有livedata的ViewModel:
I've a ViewModel with livedata like this :
MutableLiveData<Object> _obj = new MutableLiveData<>();
public LiveData<Object> obj = _obj;
最后,我有一个这样的观点:
And, at last, I've a view like this :
<layout>
<data>
<variable
name="viewModel">
type="com.sample.app.viewmodels.MainViewModel" />
</data>
<LinearLayout
... >
<TextView
android:text:="@{viewModel.obj.name}"
.../>
</LinearLayout>
</layout>
我看到我们可以在"Android开发者"中有关"LiveData"的视频中做到这一点: https://youtu.be/OMcDk2_4LSk?t = 102
I saw that we can do that in a video from "Android Developers" about "LiveData" : https://youtu.be/OMcDk2_4LSk?t=102
她说,在3.1及更高版本的Android Studio中,这是可能的.但这对我不起作用.
She says that its possible in Android studio on 3.1+ versions. But this is not working for me.
推荐答案
为此,您的模型类必须从数据绑定库扩展 BaseObservable
类.而且您必须在每个setter方法上调用 notifyChange()
,如下所示:
For this to work, your model class must extend BaseObservable
class from databinding library. And you have to call notifyChange()
on each setter method like this:
public class Object extends BaseObservable {
public String name;
public String title;
public int value;
public void setName(String name) {
this.name = name;
notifyChange();
}
public void setTitle(String title) {
this.title = title;
notifyChange();
}
public void setValue(int value) {
this.value = value;
notifyChange();
}
}
这篇关于如何对livedata对象进行数据绑定(android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!