在lambda表达式中使用注解防止多次点击 完整代码
时间: 2024-02-27 09:52:08 浏览: 112
以下是一个使用注解防止多次点击的Java代码示例:
```java
import android.os.SystemClock;
import android.view.View;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
public class DebouncingOnClickListener implements View.OnClickListener {
// 定义注解Retention为RUNTIME,表示该注解在运行时有效
@Retention(RetentionPolicy.RUNTIME)
public @interface DebounceClick {
long value() default 500; // 默认防抖时间为500ms
}
private final long minimumInterval;
private long lastClickTime;
public DebouncingOnClickListener() {
this(500);
}
public DebouncingOnClickListener(long minimumInterval) {
this.minimumInterval = minimumInterval;
}
@Override
public void onClick(View v) {
// 获取DebounceClick注解,如果存在则获取注解的值作为防抖时间
DebounceClick debounceClick = v.getClass().getAnnotation(DebounceClick.class);
long interval = minimumInterval;
if (debounceClick != null) {
interval = debounceClick.value();
}
// 如果距离上次点击时间小于防抖时间,则不执行点击事件
if (SystemClock.elapsedRealtime() - lastClickTime < interval) {
return;
}
lastClickTime = SystemClock.elapsedRealtime();
doClick(v);
}
public void doClick(View v) {
// 点击事件处理逻辑
}
}
```
使用方法:
```java
@DebouncingOnClickListener.DebounceClick(1000) // 设置防抖时间为1秒
public void onClick(View v) {
// 点击事件处理逻辑
}
```
在`onClick()`方法上使用注解`@DebounceClick(1000)`即可设置防抖时间,如果不设置,则默认时间为500ms。在点击事件处理方法中,使用`DebouncingOnClickListener.doClick()`方法替代原来的处理逻辑,即可实现防抖功能。
阅读全文