android 防止按钮暴力点击

本文介绍了一种在Android开发中防止用户重复点击按钮的方法。通过自定义NoDoubleClickListener类,可以有效地避免因延迟响应而导致的重复操作问题。这种方法简单实用,无需修改原有逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

onClick事件是Android开发中最常见的事件。比如,一个submitButton,功能是点击之后会提交一个订单,
则一般代码如下,其中submitOrder()函数会跳转到下一页进行处理 :

[html] view plain copy

  1. //代码0  
  2.     submitButton.setOnClickListener(new OnClickListener() {  
  3.         @Override  
  4.         public void onClick(View v) {  
  5.             submitOrder();  
  6.         }  
  7.     });   

正常情况下这段代码是没什么问题的,但是Android设备的机型性能等千差万别,如果碰到比较卡的手机,则有可能出现submitOrder()函数跳转页面出现延迟的现象。碰到这种现象,则用户就很有可能再次点击一次,从而造成函数被调用两次,出现重复订单的BUG。
一般地,碰到这现象,首先就会想到的就是在点击之后把submitButton设置为不可点击:

[html] view plain copy

  1. //代码1  
  2.    submitButton.setClickable(false); 
  3.    submitButton.setEnabled(false); 


此方法也确实有效,不过如果submitOrder()方法没有成功,需要再次提交订单时又需要再重复把submitButton设置为可点击状态。如果类似的button比较多时,就显得比较麻烦、混乱。

方案 

自定义一个NoDoubleClickListener,继承自OnClickListener

[html] view plain copy

  1. //代码2  
  2.     public abstract class NoDoubleClickListener implements OnClickListener { 
  3.         public static final int MIN_CLICK_DELAY_TIME = 1000;  
  4.         private long lastClickTime = 0;  
  5.         @Override  
  6.         public void onClick(View v) {  
  7.             long currentTime = Calendar.getInstance().getTimeInMillis();  
  8.             if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {  
  9.                 lastClickTime = currentTime;  
  10.                 onNoDoubleClick(v);  
  11.             }   
  12.         }     
  13.     }  

使用方法—— 给submitButton设置点击事件时用NoDoubleClickListener代替OnClickListener,并且实现方法onNoDoubleClick代替onClick即可,像这样:

[html] view plain copy

  1.         submitButton.setOnClickListener(new NoDoubleClickListener() {  
  2.             @Override  
  3.             public void onNoDoubleClick(View v) {  
  4.                 submitOrder();  
  5.             }  
  6.         }); 

原理

很简单,见代码……
就是用onNoDoubleClick代替onClick处理具体的操作,在onClick方法中加一个判断:在接收到点击事件之后,先判断一下时间,如果距离上次处理操作不足MIN_CLICK_DELAY_TIME,就忽视——即能防止误操作的连续点击导致重复事件。

MIN_CLICK_DELAY_TIME可调。

优势

好处是不用改变原有代码的逻辑,就只需要两个替换:NoDoubleClickListener代替OnClickListener,onNoDoubleClick代替onClick。 代码的结构等都不需要做改变(**对比上面的代码0跟代码**3),不需要关心处理更改button的状态这些额外判断逻辑,只需要关注业务逻辑即可,简洁优雅~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值