부모 클래스가 있는데, BaseViewModel으로 호출 할 수 있습니다.이 클래스는 입력 할 수 있으며 ObservableField 같은 유형입니다. 이와 같이 :ObservableField <>를 사용한 양방향 데이터 바인딩, set()이 작동하지 않습니다?
public class BaseViewModel<T> extends BaseObservable {
ObservableField<T> value = new ObservableField<>();
public T getValue() {
return value.get();
}
public void setValue(T value) {
this.value.set(value);
setHasChanges(value != originalValue);
}
}
나는이 클래스에 대해 많은 자녀를 갖고있다. 그 중 하나는 입니다. StringViewModel은 이름에서와 같이 String 값을 제공합니다. 이 아이 클래스는 의 setValue() 방법 오버라이드 (override) :
public class StringViewModel extends BaseViewModel<String> {
@Override
public void setValue(String value) {
this.value.set(value);
if(value != null && !value.isEmpty()){
setHasChanges(!value.equals(originalValue));
}
else if(originalValue == null)
setHasChanges(false);
else
setHasChanges(!originalValue.isEmpty());
}
//Other methods ...
}
을 그리고 나는 StringViewModel 사용 레이아웃을 가지고 :
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.myproject.viewmodels.StringViewModel" />
</data>
<EditText
android:id="@+id/value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="@{viewModel.editable}"
android:cursorVisible="@{viewModel.editable}"
android:ellipsize="end"
android:focusable="@{viewModel.editable}"
android:focusableInTouchMode="@{viewModel.editable}"
android:inputType="textMultiLine|textNoSuggestions"
android:text="@={viewModel.value}"
app:setError="@{viewModel.error}"
tools:text="Dupont" />
<!-- Other layouts ... -->
을하지만 난 의 setValue를 호출 할 때() 내 방법 StringViewModel이면 값은 ViewModel로 설정되지만 EditText에는 설정되지 않습니다.
편집 : 나는 또한 내가 (내 데이터 바인딩을 팽창 DataBindingUtil를 사용하여) 올바르게 내 데이터 바인딩 내 StringViewModel를 추가했습니다 있다고한다.
myDataBinding.setViewModel(new StringViewModel());
누군가가이 동작에 대한 설명을 가지고 있습니까? @iMDroid 말했듯이
편집
, 내 방법 setValue()
에 전화 notifyChange()
이 있어야합니다. 나는 힘들어 ObservableFields 나를 위해 그것을하고 있었다, 나쁘다.
도움을 주셔서 감사합니다. 그러나 제 질문을 편집하면서이 점을 언급하는 것을 잊었습니다. 실제로 DataBindingUtil을 사용하여 DataBinding에 내 변수를 올바르게 추가했습니다. – MHogge
조차도 내 대답을 편집했습니다. notifyChange()를 추가하려고 했습니까? – iMDroid
니스 작동 중! 나는 그것이 ObservableField 였기 때문에 나는 아무것도 알릴 필요가 없다고 생각했다. 도와 주셔서 감사합니다. 답변으로 받아 들일 것입니다. – MHogge