Пользовательский onClickListener для привязки данных - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу создать пользовательский 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)

}

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

1 Ответ

0 голосов
/ 21 декабря 2018

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

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

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

...