Я хочу создать собственный 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? и если да, не могли бы вы рассказать мне, как?
Используя привязку данных, вы можете указать, какой слушатель вызывать при возникновении события, просто вызвав его в лямбда-выражении. Например, предположим, что у вас есть метод в вашей модели просмотра, который называется myOnClick (). Вы можете использовать его с привязкой данных следующим образом:
android:onClick = "@{() -> viewModel.myOnClick()}"
Определение настраиваемого адаптера привязки под названием OneClickListener - это нечто иное, и он не будет вызываться при срабатывании события щелчка, если вы не используете трюк: регистрацию прослушивателя щелчка внутри настраиваемого адаптера привязки. Это означает, что вам придется вызвать метод, который регистрирует другой метод: на самом деле не самый чистый способ добавить слушателя.