如何数据绑定 livedata 对象 (android)
How to databind livedata object (android)
今天我有一些关于 android、
上的 mvvm 和数据绑定的问题
我正在尝试在视图上绑定对象属性。
我有一个具有某些属性的对象(模型),例如:
public String name;
public String title;
public int value;
我有一个带有这样实时数据的 ViewModel :
MutableLiveData<Object> _obj = new MutableLiveData<>();
public LiveData<Object> obj = _obj;
最后,我有这样的观点:
<layout>
<data>
<variable
name="viewModel">
type="com.sample.app.viewmodels.MainViewModel" />
</data>
<LinearLayout
... >
<TextView
android:text:="@{viewModel.obj.name}"
.../>
</LinearLayout>
</layout>
我在 "Android Developers" 关于 "LiveData" 的视频中看到我们可以做到这一点:https://youtu.be/OMcDk2_4LSk?t=102
她说可以在 Android studio 的 3.1+ 版本上实现。
但这对我不起作用。
为此,您的模型 class 必须从数据绑定库扩展 BaseObservable
class。你必须像这样在每个 setter 方法上调用 notifyChange()
:
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();
}
}
今天我有一些关于 android、
上的 mvvm 和数据绑定的问题我正在尝试在视图上绑定对象属性。
我有一个具有某些属性的对象(模型),例如:
public String name;
public String title;
public int value;
我有一个带有这样实时数据的 ViewModel :
MutableLiveData<Object> _obj = new MutableLiveData<>();
public LiveData<Object> obj = _obj;
最后,我有这样的观点:
<layout>
<data>
<variable
name="viewModel">
type="com.sample.app.viewmodels.MainViewModel" />
</data>
<LinearLayout
... >
<TextView
android:text:="@{viewModel.obj.name}"
.../>
</LinearLayout>
</layout>
我在 "Android Developers" 关于 "LiveData" 的视频中看到我们可以做到这一点:https://youtu.be/OMcDk2_4LSk?t=102
她说可以在 Android studio 的 3.1+ 版本上实现。 但这对我不起作用。
为此,您的模型 class 必须从数据绑定库扩展 BaseObservable
class。你必须像这样在每个 setter 方法上调用 notifyChange()
:
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();
}
}