我有一個父類,我們可以稱它爲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,就像它的名字說的那樣,它給出了一個字符串值。這個子類覆蓋的setValue()方法:
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上。
編輯:我還要說,我已經加我StringViewModel我數據綁定正確(使用DataBindingUtil誇大我的數據綁定)。
myDataBinding.setViewModel(new StringViewModel());
是否有人得到了一個解釋這種現象?
編輯
正如@iMDroid說,我應該有通話notifyChange()
在我的方法setValue()
。我買ObservableFields是爲我做的,我的壞。
感謝您的幫助,但是當我編輯我的問題時,我忘了提及這一點。我實際上已經正確使用DataBindingUtil將我的變量添加到DataBinding中。 – MHogge
即使我編輯了我的答案..你嘗試添加notifyChange()嗎? – iMDroid
不錯,它的工作!我以爲是因爲它是ObservableField,我不需要通知任何東西,我的壞。感謝您的幫助,我會接受這個答案。 – MHogge