(法国,抱歉造成误解)
我对Android上的数据绑定是陌生的,并且正在为一个相当简单的问题而苦苦挣扎。
假设我有这个POJO,我们将其作为模型的一部分
public class User
{
public String name;
public User(String name)
{
this.name = name;
}
}
现在我有一个包含用户的ViewModel
public class MyViewModel extends ViewModel
{
private User user = new User("blue");
public String getName()
{
return user.name;
}
public void setName(String name)
{
user.name = name;
}
}
我希望视图(活动)能够在此“名称”字段上进行双向数据绑定。我知道如何进行Activity和XML等操作,例如设置Binding类等。我不知道的是,如何使ViewModel对于User类的“ name”字段上的任何更改都是可观察的。请注意,我不想通过执行以下操作使我的User类可观察:
public class User
{
public MutableLiveData<String> name;
public User(String name)
{
this.name.setValue(name);
}
}
因为我个人更喜欢将此Android设备远离我的模型。
如何更改ViewModel,以便View可以侦听“名称”的更改?我已经看到了@Bindable批注中的某些内容,但是我不确定如何使用它。
感谢您的帮助
答案 0 :(得分:0)
You can add Bindable like this in your POJO Class
public class User extends BaseObservable
{
public String name;
public User(String name)
{
this.name = name;
}
@Bindable
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
notifyPropertyChanged(BR.name);
}
}
答案 1 :(得分:0)
在布局文件中,您将得到类似的内容:
<data>
<variable name="vm" type="<your_package>.MyViewModel" />
</data>
然后,您可能会有类似TextView
这样的名称,该名称使用以下方式绑定:
<TextView
android:id="@+id/name"
android:text="@{vm.name}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
您需要做的另一件事是在活动/片段中调用以下命令:
binding.setLifecycleOwner(this)
(以及binding.vm = yourViewModelInstance
)