我想创建一个自定义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中?如果可以,请您告诉我如何?
答案 0 :(得分:0)
使用数据绑定,您可以仅通过在lambda中进行调用来指定触发事件时要调用的侦听器。例如,假设您的视图模型中有一个名为myOnClick()的方法。您可以通过以下方式将其与数据绑定一起使用:
android:onClick="@{() -> viewModel.myOnClick()}"
定义一个称为OneClickListener的自定义绑定适配器是不同的事情,并且在触发click事件时将不会调用它,除非您使用技巧:在自定义绑定适配器内注册一个Click侦听器。这意味着您必须调用一个注册其他方法的方法:这并不是添加监听器的最干净的方法。