Это было совершенно неправильно: android:onProgressChanged="onSeekBarChanged"
Правильный путь:
android:onProgressChanged="@{viewModel::onSeekBarChanged}"
fun onSeekBarChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.d(TAG, "on SeekBarChanged")
}
ИЛИ
android:onProgressChanged="@{() -> viewModel.onSeekBarChanged()}"
fun onSeekBarChanged() {
Log.d(TAG, "on SeekBarChanged")
}
Первое решение называется ссылки на метод ( документация ).Подпись метода должна совпадать с сигнатурой соответствующего метода слушателя.В моем случае это было onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
из SeekBar.OnSeekBarChangeListener
Второй метод называется привязки слушателя .И вы можете опустить параметры метода.Но обратите внимание на возвращаемое значение:
Если событие, которое вы слушаете, возвращает значение, тип которого не равен void, ваши выражения также должны возвращать значение того же типа.Например, если вы хотите прослушивать событие длинного щелчка, ваше выражение должно возвращать логическое значение.
onProgressChanged
Возвращаемое значение равно void
(Kotlin Unit
), так что вышене применимо.