我已經創建了自己的一些簡單的類來驗證通過雙向數據綁定的字段。自定義對象雙向數據綁定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