自从我开始编码的第一天起,我就有一个常见的问题:避免多次处理事件(单击按钮。。。)。大多数时候,我想出一个简单的解决方案(添加一个布尔标志来检查),如下所示:
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;
}
这很好。但是随着班级的增加,具有更多的功能和事件,一切都开始出错。我们需要创建too many boolean flags,它对业务没有任何意义,并且不应是此类的字段。
有人对此有更好的解决方案吗?
该限制可以由包装器支持(如果您需要独立保护每个按钮的单击,则为该限制。)>
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); } } }
我不是android开发人员,所以如果不同的线程可以调用'onClick',则使用
AtomicBoolean
。>