Android防止多次点击

    该问题始于真实案例中:

    在做公司项目的时候,移交测试的时候,反馈连续点击提交信息的按钮,会多次post数据到服务器,导致产生了错误的重复数据

   在网上寻找答案,发现网上的答案多数是创建一个新的myButton类继承button,重写其中的方法或者增加接口等类似做法,进行计时,一秒内或者一段时间内,无法再次触发业务

逻辑,显然这种办法简单粗暴,但是不可控,谁能知道业务逻辑是在多长的时间内完成呢,因此我按照自己的思路,较为成功的解决了该问题,下面上图


这是我在基类里写的点击监听方法,在点击事件触发抽象方法(该抽象和传统onClick作用一致,只是做了一层封装),代码很少,逻辑也很简单,就是在点击一次后,设置该view不可再被点击


这里是我封装的网络请求的类,道理和如上的点击监听一样,只是单纯的封装,但是比一般的网络请求多传了一个参数View,逻辑同样很简单,效果却很暴力,这样做无论业务逻辑需要处理多久,在处理过程中,点击事件始终不会被触发,直到业务逻辑处理完毕,点击事件再次被激活



PS:如有更好的解决方案,欢迎留言交流

----------------------------------------------------------

最近对此法进行了优化改良,以下是图文


这里我们创建一个接口,并且不需要实现任何方法,仅作为一个标记,同时还能再创建一个接口(该接口与本文单次点击无关,仅作为补充说明)

 

然后去自定义我们的按钮,实现SingleClick这个接口

如上图,由于该接口没有任务方法,仅为一个标记,所以自定义的按钮类同样不需要实现任何方法

接下来在基类BaseActivity中去操作抽象的逻辑


看到这里应该明白了吧...在onClick方法里,凡是实现了SingleClick接口的,一律点完以后设置为阻断,在onResume方法执行以后重新激活所有按钮(考虑点击按钮以后onPause以后再次获取焦点,按钮无法点击的情况),至于StartAnimator接口的逻辑仅为参考,大家可以自行设置需要的接口,进行各种各样复杂的逻辑判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值