51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Android 阻止快速点击时触发多次点击事件处理类

工具处理类 {#工具处理类}

/**
 * 按照设定间隔允许再次点击,避免点击过快触发多次。
 * <p>
 * 针对同一触发者View生效
 */
public class ClickLookUtils {

    //线程安全Map
    private final static Map&lt;Integer, ClickLookUtils&gt; MAP = new ConcurrentHashMap&lt;&gt;();

    @IdRes
    private final int viewId;
    private int interval;

    private ClickLookUtils(int viewId) {
        this.viewId = viewId;
        this.interval = 200;
    }

    /**
     * 创建工厂
     *
     * @param view 点击的View
     */
    public static ClickLookUtils createFactory(View view) {
        return createFactory(view.getId());
    }

    /**
     * 创建工厂
     *
     * @param viewId 点击View的ID
     */
    public static ClickLookUtils createFactory(@IdRes int viewId) {
        ClickLookUtils obj = MAP.get(viewId);
        if (null == obj) {
            obj = new ClickLookUtils(viewId);
        }
        return obj;
    }

    /**
     * 设置间隔,单位毫秒
     * &lt;p&gt;
     * 默认200毫秒
     */
    public ClickLookUtils setInterval(int interval) {
        this.interval = interval;
        return this;
    }

    /**
     * 检查是否可以再次触发点击
     *
     * @return true: 不允许触发点击,false: 可以触发点击
     */
    public boolean checkLook() {
        ClickLookUtils obj = MAP.get(viewId);
        //缓存内检测到对应view时禁止再次点击
        if (null == obj) {

            MAP.put(viewId, this);
            //添加计时任务,时间到后清除缓存,此时允许点击
            new Handler(Looper.myLooper()).postDelayed(() -&gt; MAP.remove(viewId), interval);

            return false;
        }
        return true;
    }



`}
`

使用方式 {#使用方式}

			if (ClickLookUtils.createFactory(view).checkLook()) {
                Log.w("TAG", "200毫秒内不可重复点击");
            } else {
                Log.w("TAG", "可点击");
            }
赞(0)
未经允许不得转载:工具盒子 » Android 阻止快速点击时触发多次点击事件处理类