我已经创建了自己的一些简单的类来验证通过双向数据绑定的字段。自定义对象双向数据绑定android:text
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);
}
...
}
在视图模型我建立这个类并将其绑定到查看数据绑定 如常(全部结合实际工作所以这里没有错误)。
public ValidatedField phoneNumber = new ValidatedField();
在布局,我有看法与Android:text属性和我的设置:
<EditText
android:text="@={viewModel.phoneNumber.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领域。 e.g:
@Bindable
public boolean getIsError()
{
return mIsError;
}
这将工作,但只有在类中没有其他Bindable字段时才有效。如果我想检查例如phoneNumber.isError访问Bindable公共布尔getIsError(){返回mIsError; }它说错误:找不到访问器java.lang.String.error – mlyko