验证Android数据绑定EditText设置错误
我们正在使用Kubwa验证库使用安卓数据绑定库验证表单,但是错误没有显示在EditText中
视图模型:
@Override
public void onLoginClick(View view) {
validator.validateEmail(user.getEmail());
validator.validatePassword(user.getPassword());
notifyChange();
if (validator.isValid()) connector.login(user);
}
@Bindable
@Override
public String getEmailError() {
return validator.getEmailErrorMessage();
}
@Bindable
@Override
public String getPasswordError() {
return validator.getPasswordErrorMessage();
}
和我的xml:
<EditText
安卓:id="@+id/email"
安卓:text="@={viewModel.user.email}"
app:error="@{viewModel.emailError}"/> <!-- As the wiki said -->
当我意识到这不起作用时,我创建了一个BindingAdapter
并更改了xml属性,但它也不起作用
@BindingAdapter("app:errorText")
public static void BindError(EditText view, String error){
view.setError(error);
}
非常感谢您的任何见解
# 1 楼答案
我尝试了一些类似于你的例子,效果很好
我把验证放在集合名中的可观测值,但你的应该是相同的。您可能更喜欢将其放在InverseBindingAdapter中:
布局如下:
我猜您没有使用
DataBindingUtil.setContentView()
或忘记在绑定中设置ViewModel对象。有时发生这种情况是因为人们在DataBindingUtil.setContentView()
之后使用Activity.setContentView()
您可以在这里看到,我不需要
app:error
的BindingAdapter,因为setter的名称与属性相同# 2 楼答案
这更多的是关于如何使用数据绑定库的问题。您正在将
errorText
绑定到错误,但在布局中使用error
。将BindingAdapter更改为@BindingAdapter({"app:error"})
应该可以修复此错误