양방향 데이터 바인딩을 통해 필드의 유효성을 검사하는 간단한 클래스를 만들었습니다.사용자 정의 객체 양방향 데이터 바인딩 android : text
의 ViewModel I 설정에서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);
}
...
}
이 클래스와 데이터 바인딩에서 평소 볼 수 바인딩 (모든 바인딩이 실제로 그래서 여기에 오류가 작동하지 않습니다). 텍스트 속성과 I 설정 : 레이아웃에서
public ValidatedField phoneNumber = new ValidatedField();
, 나는 안드로이드와보기가
<EditText
android:text="@={viewModel.phoneNumber.value}"
/>
을 그리고 모든 매력처럼 작동합니다.
그리고 제 질문은 : 그것은 하나의 방법은 예를 들어, 바인딩 된 경우 가<EditText
android:text="@={viewModel.phoneNumber}"
/>
나는 그것이 작동되도록 수 : 이 가능은 다음과 같습니다 너무 레이아웃에서 '.value'를 생략하는 것입니다
@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;
}
클래스에 다른 Bindable 필드가없는 경우에만 작동합니다. 예를 들어 확인하고 싶다면 접근 자의 phoneNumber.isError Bindable public boolean getIsError() {return mIsError; } 오류 : 접근자를 찾을 수 없음 java.lang.String.error – mlyko