Вы можете сделать это, передав onTextChanged
включенному макету.Смотрите пример -
Это base_edittext_view.xml
<data>
<variable
name="onTextChanged"
type="androidx.databinding.adapters.TextViewBindingAdapter.OnTextChanged" />
</data>
<com.google.android.material.textfield.TextInputEditText
...
android:onTextChanged="@{onTextChanged}" />
Теперь вы можете передать onTextChanged
включенному макету, как показано ниже.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/base_edittext_view"
app:onTextChanged="@{(text, start, before, count) -> viewModel.onTextChanged(text)}"/>
</LinearLayout>
------------- Вот и все!
Может быть МНОГИЕ другие способы реализовать это.Я хотел бы поделиться с вами ПОЛНОЙ ИНФОРМАЦИЕЙ.
WAY 2
Вы можете создать другую переменную данных в родительском макете.И включите его, чтобы включить макет, как указано выше.Как показано ниже -
<data>
<variable
name="onTextChanged"
type="androidx.databinding.adapters.TextViewBindingAdapter.OnTextChanged" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/base_edittext_view"
app:onTextChanged="@{onTextChanged}" />
</LinearLayout>
И затем вы можете реализовать OnTextChanged
в Activity / ViewModel (где вам нужно).
binding.setOnTextChanged(new TextViewBindingAdapter.OnTextChanged() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// do you work.
}
});
WAY 3
ИЛИ, если вы не хотите использовать другую переменную в родительском макете, , тогда вы можете напрямую передать onTextChanged
во включенный макет из класса Java / Kotlin.Смотрите пример -
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/includedEditText"
layout="@layout/base_edittext_view"
/>
</LinearLayout>
Затем из класса Java -
binding.includedEditText.setOnTextChanged(new TextViewBindingAdapter.OnTextChanged() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// your work
}
});
Также может быть много других способов.Например, создание собственного метода во ViewModel / Activity и вызов этого метода из макета.