有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是防止重复事件句柄的好方法

从开始编写代码的第一天起,我就遇到了一个常见问题:避免处理事件(单击按钮,…)多次。大多数情况下,我会想出一个简单的解决方案(添加一个布尔标志进行检查),如下所示:

private boolean isProcessingClick = false;

@Override
public void onClick(View v) {
    onLoginButtonClick();
}

private void onLoginButtonClick() {
    if (isProcessingClick) 
        return;
    isProcessingClick = true;

    // Do something..
    // Update some UIs..

    isProcessingClick = false;
}

这很有效。但随着班级规模的扩大,更多的功能&;一切都开始出问题了。我们需要创建太多的布尔标志,这与业务无关,不应该是此类的字段

有谁有更好的解决方案吗


共 (1) 个答案

  1. # 1 楼答案

    包装器可以支持该限制(如果需要单独保护每个按钮的点击)

    class MyOnClickListener implements View.OnClickListener {
        private final View.OnClickListener internal;
        private final AtomicBoolean isProcessingClick = new AtomicBoolean();
    
        public MyOnClickListener(View.OnClickListener internal) {
            this.internal = internal;
        }
    
        @Override
        public void onClick(View v) {
            try {
                boolean noProcessing = this.isProcessingClick.compareAndSet(false, true);
                if(noProcessing) {
                    internal.onClick(v);
                } else {
                    // it's good to show some alert for the user here
                }
            } finally {
                isProcessingClick.set(false);
            }
        }
    }
    
    

    我不是安卓开发者,所以使用AtomicBoolean来防止不同线程调用“onClick”