@George Mount是正確的,您必須在您的模型或處理程序類(無論您稱之爲)中定義的佈局xml中添加處理程序。
看看我的回答對這個問題的一個羽翼豐滿的例子:
Two way databinding with Android Databinding Library
下面是這個問題的答案的例子:
例子:
public class AmanteEditModel extends BaseObservable {
private String senhaConfirm;
@Bindable
public String getSenhaConfirm() {
return senhaConfirm;
}
public void setSenhaConfirm(String senhaConfirm) {
this.senhaConfirm = senhaConfirm;
notifyPropertyChanged(BR.senhaConfirm);
}
// Textwatcher Reference: http://developer.android.com/reference/android/text/TextWatcher.html
public TextWatcher getMyEditTextWatcher() {
return new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
// Important! Use the property setter, otherwhise the model won't be informed about the change.
setSenhaConfirm(s);
}
};
}
}
在佈局XML將EditText更改爲:
<EditText
android:id="@+id/amante_edit_senha_confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:hint="Confirme a senha"
android:inputType="textPassword"
android:maxLines="1"
android:text="@{model.senhaConfirm}"
app:addTextChangeListener="@{model.myEditTextWatcher}"
/>
請注意名稱空間爲addTextChangeListener。此方法可能無法通過android:命名空間獲得,所以我正在使用app:here。您也可以使用bind:使綁定更清晰。
所以千萬不要錯過
xmlns:app="http://schemas.android.com/apk/res-auto"
或
xmlns:bind="http://schemas.android.com/apk/res-auto"
添加到您的XML命名空間。
此解決方案適用於所有輸入控件,包含自定義,因爲您在模型中提供了正確的聽衆。
TextWatcher Reference
嗯,它應該工作。它可能是一個IDE突出的錯誤。你嘗試編譯? – yigit
今天我學到了,我應該總是試着編譯:)它的工作原理!謝謝,yigit! – prograde
但是,嗯,它會調用foo.getBar()方法將它自己設置在正確的位置。但它似乎永遠不會調用foo.setBar()方法,所以在我的代碼中永遠不會更新該值。它仍然需要一個SeekBarChangeListener,或者什麼? – prograde