Члены группы Android UI Toolkit Йигит Бояр и Джордж Маунт рассказали о привязке данных< /а>. В видео на 13:41 Джордж Маунт говорит об этом
Вы также можете использовать некоторые странные слушатели, такие как onTextChanged. У TextWatcher есть три метода, но всех волнует только onTextChanged, верно? Вы можете получить доступ только к одному из них, если хотите, или ко всем сразу."
<Button android:onTextChanged="@{handlers.textChanged}" …/>
Он как будто говорил, что вместо обычного addTextChangedListener, который выглядит примерно так
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//Do something
}
@Override
public void afterTextChanged(Editable editable) {}
});
мы могли бы просто сделать это
<EditText
android:onTextChanged="@{handlers::onTextChanged}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Класс обработчиков
public class Handlers{
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Do something
}
}
Код работает в этом случае, но, похоже, он не работает в других случаях, когда у слушателя есть несколько методов, таких как ViewPager addOnPageChangeListener. Например это не работает
<android.support.v4.view.ViewPager
android:OnPageSelected="@{handlers::onPageSelected}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
и класс обработчиков
public class Handlers{
public void onPageSelected(int position) {
//Do something
}
}
Проект выдает эту ошибку при попытке построить
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Could not resolve handlers::onPageSelected as a listener.
****\ data binding error ****
Теперь я немного запутался, потому что оказалось, что EditText на самом деле имеет унаследованный onTextChanged, к которому библиотека привязки данных также может привязать android:onTextChanged="@{handlers::onTextChanged}"
.
Итак, мой вопрос в том, что на самом деле возможно привязываться к одному методу прослушивания, и я что-то упускаю, или Джордж Маунт сделал ошибку в своем выступлении?