gpt4 book ai didi

android - 避免按钮多次快速点击

转载 作者:IT老高 更新时间:2023-10-28 13:11:33 25 4
gpt4 key购买 nike

我的应用程序有一个问题,如果用户快速多次单击按钮,那么在我按住按钮的对话框消失之前就会生成多个事件

我知道一个解决方案,方法是在单击按钮时将 bool 变量设置为标志,以便在关闭对话框之前可以防止以后的单击。但是,我有很多按钮,并且每次都必须为每个按钮都这样做似乎是一种矫枉过正。 android(或者可能是一些更智能的解决方案)中是否没有其他方法只允许每次单击按钮生成的事件操作?

更糟糕的是,在处理第一个操作之前,多次快速点击似乎会生成多个事件操作,所以如果我想在第一次点击处理方法中禁用按钮,队列中已经存在事件操作等待处理!

请帮忙谢谢

最佳答案

这是我最近写的一个“去抖动”的 onClick 监听器。你告诉它两次点击之间可接受的最小毫秒数是多少。在 onDebouncedClick 而不是 onClick

中实现您的逻辑
import android.os.SystemClock;
import android.view.View;

import java.util.Map;
import java.util.WeakHashMap;

/**
* A Debounced OnClickListener
* Rejects clicks that are too close together in time.
* This class is safe to use as an OnClickListener for multiple views, and will debounce each one separately.
*/
public abstract class DebouncedOnClickListener implements View.OnClickListener {

private final long minimumIntervalMillis;
private Map<View, Long> lastClickMap;

/**
* Implement this in your subclass instead of onClick
* @param v The view that was clicked
*/
public abstract void onDebouncedClick(View v);

/**
* The one and only constructor
* @param minimumIntervalMillis The minimum allowed time between clicks - any click sooner than this after a previous click will be rejected
*/
public DebouncedOnClickListener(long minimumIntervalMillis) {
this.minimumIntervalMillis = minimumIntervalMillis;
this.lastClickMap = new WeakHashMap<>();
}

@Override
public void onClick(View clickedView) {
Long previousClickTimestamp = lastClickMap.get(clickedView);
long currentTimestamp = SystemClock.uptimeMillis();

lastClickMap.put(clickedView, currentTimestamp);
if(previousClickTimestamp == null || Math.abs(currentTimestamp - previousClickTimestamp) > minimumIntervalMillis) {
onDebouncedClick(clickedView);
}
}
}

关于android - 避免按钮多次快速点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com