Вам не хватает еще одного адаптера привязки, как указано в документации InverseBindingAdapter :
@BindingAdapter(value = [ "android:textAttrChanged"], requireAll = false)
fun setTextWatcher( view: TextInputEditText, textAttrChanged: InverseBindingListener?) {
val newValue = object: TextWatcher {
override fun afterTextChanged(s: Editable?) = Unit
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
override fun onTextChanged( s:CharSequence, start:Int, before:Int, count:Int) {
textAttrChanged?.onChange()
}
}
val oldValue = ListenerUtil.trackListener(view, newValue, R.id.textWatcher)
if (oldValue != null) {
view.removeTextChangedListener(oldValue)
}
view.addTextChangedListener(newValue)
}
Когда вы создаете @InverseBindingAdapter(attribute = "android:text")
, создается событие android:textAttrChanged
, и у вас есть добавить для него адаптер привязки.
Вызов textAttrChanged?.onChange()
вызовет InverseBindingAdapter
, который вы создали.
РЕДАКТИРОВАТЬ: Кроме того, вы используете Kotlin, поэтому вам не нужно помещать адаптеры привязки в object
. Отдельного файла будет достаточно. Просто удалите упаковку object DataBindingAdapters {..}
и @JvmStatic
, и все будет в порядке.