miqbaldc
03/24/2020, 11:27 AMsetOnClickLIstener
doesn’t works on point 1, but works in point 2,
DebouncingOnClickListener
is an interface that override View.OnClickListener#onClick(View)
to prevent spamming click
see this code below:
// 1. this doesn't works
fun View.setDebouncingOnClickListener(onSafeClick: (View) -> Unit) {
setOnClickListener(DebouncingOnClickListener {
onSafeClick(it)
})
}
// 2. this works
fun View.setDebouncingOnClickListener(onSafeClick: (View) -> Unit) {
val listener = DebouncingOnClickListener {
onSafeClick(it)
}
setOnClickListener(listener)
}
arekolek
03/24/2020, 12:52 PM)
that was missing from setOnClickListener
after the }
arekolek
03/24/2020, 12:53 PMsetOnClickListener(DebouncingOnClickListener(onSafeClick))
miqbaldc
03/24/2020, 2:57 PMarekolek
03/24/2020, 3:11 PMarekolek
03/24/2020, 3:12 PMmiqbaldc
03/25/2020, 6:04 AMpublic interface DebouncingOnClickListener extends View.OnClickListener {
Clicked clicked = new Clicked(0);
void doClick(View v);
@Override
default void onClick(View v) {
if (!clicked.get()) {
clicked.set(SystemClock.elapsedRealtime());
doClick(v);
}
}
}
// when I tried to invoke using options 1
viewInKotlin.setDeouncingClickListener {
// pressed twice, will show toast twice
}