如何使用自定义的onClick进行数据绑定
How to use customized onClick for data binding
我正在使用数据绑定,但无法解决多次快速点击问题。相反,我不想在每次点击时都添加逻辑,我想创建一次解决方案并希望它在我的项目中发挥作用。
我找到了一个解决方案 here。该页面的代码片段如下:
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)}"
我怎样才能做到这一点?请帮忙。谢谢
欢迎来到 Whosebug 社区。
只需将扩展函数复制到绑定适配器即可。 :)
@BindingAdapter("android:myOwnClick")
fun CustomClickHandler(view: View, onSafeClick: (View) -> Unit) {
val safeClickListener = SafeClickListener {
onSafeClick(it)
}
setOnClickListener(safeClickListener)
}
我正在使用数据绑定,但无法解决多次快速点击问题。相反,我不想在每次点击时都添加逻辑,我想创建一次解决方案并希望它在我的项目中发挥作用。
我找到了一个解决方案 here。该页面的代码片段如下:
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)}"
我怎样才能做到这一点?请帮忙。谢谢
欢迎来到 Whosebug 社区。
只需将扩展函数复制到绑定适配器即可。 :)
@BindingAdapter("android:myOwnClick")
fun CustomClickHandler(view: View, onSafeClick: (View) -> Unit) {
val safeClickListener = SafeClickListener {
onSafeClick(it)
}
setOnClickListener(safeClickListener)
}