Пользовательский onClickListener для привязки данных

Я хочу создать собственный onClickListener, который будет использоваться для привязки данных. Этот настраиваемый прослушиватель кликов не позволяет пользователю спамить кнопку и дважды запускать событие (например, показывать два диалога одновременно). Ниже я создал настраиваемый прослушиватель, который работает в обычном коде, но я не знаю, как реализовать его для привязки данных, например android:onClick = "" в xml..

abstract class OneClickListener(var delay: Long) : View.OnClickListener {
private var hasClicked: Boolean = true

constructor() : this(1000)

override fun onClick(it: View) {
    if (!hasClicked) {
        return
    } else {
        hasClicked = false
        onClicked(it)
        GlobalScope.launch {
            delay(delay)
            hasClicked = true
        }
    }
}

abstract fun onClicked(it: View)

}

Можно ли использовать этот список при привязке данных, например, app:OneClickListener = "@{viewModel::MyMethod}" в XML? и если да, не могли бы вы рассказать мне, как?

3
0
828
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя привязку данных, вы можете указать, какой слушатель вызывать при возникновении события, просто вызвав его в лямбда-выражении. Например, предположим, что у вас есть метод в вашей модели просмотра, который называется myOnClick (). Вы можете использовать его с привязкой данных следующим образом:

android:onClick = "@{() -> viewModel.myOnClick()}"

Определение настраиваемого адаптера привязки под названием OneClickListener - это нечто иное, и он не будет вызываться при срабатывании события щелчка, если вы не используете трюк: регистрацию прослушивателя щелчка внутри настраиваемого адаптера привязки. Это означает, что вам придется вызвать метод, который регистрирует другой метод: на самом деле не самый чистый способ добавить слушателя.

Другие вопросы по теме