【发布时间】:2016-09-21 22:36:25
【问题描述】:
我为自己创建了一些简单的类,用于通过双向数据绑定验证字段。
public class ValidatedField extends BaseObservable{
private String mValue;
@Bindable
public String getValue()
{
return mValue;
}
public void setValue(String value)
{
if(Objects.equals(value, mValue)) return;
mValue = value;
notifyPropertyChanged(BR.value);
}
...
}
在 ViewModel 中,我设置了这个类,并像往常一样在数据绑定中将其绑定到视图 (所有绑定实际上都有效,所以这里没有错误)。
public ValidatedField phoneNumber = new ValidatedField();
在布局中,我使用 android:text 属性查看并设置:
<EditText
android:text="@={viewModel.phoneNumber.value}"
/>
一切都像魅力一样。
我的问题是:是否可以从布局中跳过“.value”,使其看起来像这样:
<EditText
android:text="@={viewModel.phoneNumber}"
/>
如果它是一种绑定方式,例如,我可以让它工作。通过这样的绑定转换:
@BindingConversion
public static String convertValidatedFieldToString(ValidatedField field){
return field.getValue();
}
但我无法为现有的 ValidatedField 设置新值。 我尝试使用 @InverseBindingAdapter 但这没有运气,因为它每次都会创建新对象,而不仅仅是更新现有对象的值。
@InverseBindingAdapter(attribute = "android:text")
public static ValidatedField convertStringToValidatedField(TextView view)
{
return new ValidatedField(view.getText().toString());
}
谢谢!
编辑: 我应该说我在课堂上还有其他 @Bindable 字段。例如:
@Bindable
public boolean getIsError()
{
return mIsError;
}
【问题讨论】:
标签: android android-databinding 2-way-object-databinding