我正在使用数据绑定并且无法解决多个快速单击问题。我不想在每次点击中都添加一个逻辑,我想创建一个解决方案并期望它在我的整个项目中都能正常工作。
我在这里找到了一种解决方案。该页面的代码片段如下:
class SafeClickListener(
private var defaultInterval: Int = 1000,
private val onSafeCLick: (View) -> Unit
) : View.OnClickListener {
private var lastTimeClicked: Long = 0
override fun onClick(v: View) {
if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
return
}
lastTimeClicked = SystemClock.elapsedRealtime()
onSafeCLick(v)
}
}
并使用扩展功能:
fun View.setSafeOnClickListener(onSafeClick: (View) -> Unit) {
val safeClickListener = SafeClickListener {
onSafeClick(it)
}
setOnClickListener(safeClickListener)
}
最后,对于任何视图,我们都可以简单地调用:
anyView.setSafeOnClickListener {
doYourStuff()
}
这太棒了。但它仅适用于我将 setOnClickListener 调用到视图但我正在使用数据绑定的情况。我在哪里使用这样的东西:
android: onClick="@{(view) -> myViewModel.UIEvents(SomeUIEvent.showDialog)}"
我知道如果我可以创建一个绑定适配器,我就能解决这个问题。但是,我无法制作一个有效的。我应该在这里放什么代码:
@BindingAdapter("android:myOwnClick")
fun CustomClickHandler(view: View, "some code here") {
"And some codes here to deligate onclick to"
"The setSafeOnClickListener defined above"
}
这样我就可以在我的xml(数据绑定)中使用:
android: myOwnClick="@{(view) -> myViewModel.UIEvents(SomeUIEvent.showDialog)}"
我怎样才能做到这一点?请帮忙。谢谢