前言

  按键防止连续点击是任何一个项目都要考虑的功能.下面我们将介绍几种防止按键连续点击的方法

用工具类实现

/**
*@content:按键延时工具类,用于防止按键连点
*@time:2019-5-19
*@build:
*/ public class ButtonDelayUtil { private static final int MIN_CLICK_DELAY_TIME = 1000;
private static long lastClickTime; public static boolean isFastClick(){
boolean flag = false;
long curClickTime = System.currentTimeMillis();
if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
flag = true;
}
lastClickTime = curClickTime;
return flag;
} }

使用

mAdapter.setItemClickListener(new PTempEventListAdapter.OnItemClickListener() {
@Override
public void onItemClick(PTempEventListBase.TempEventData tempEventData) {
if (ButtonDelayUtil.isFastClick()){
Intent intent = new Intent(PTempEventListActivity.this, PTempEventDetailActivity.class);
intent.putExtra(PTempEventDetailActivity.APPLY_ID_KEY, tempEventData.getApplyId());
startActivity(intent);
}
}
});

很简单,但是使用的时候也很麻烦.也会让代码非常不简洁,可以作为一种补充办法.

重写点击OnClickListener类实现

public abstract class OnForbidClickListener implements View.OnClickListener {
private static final long DELAYED_TIME = 1000;
private long lastTime = 0; public abstract void forbidClick(View view); @Override
public void onClick(View v) {
if (System.currentTimeMillis()-lastTime > DELAYED_TIME){
lastTime = System.currentTimeMillis();
forbidClick(v);
}
}
}

使用

mFaceInfoText.setOnClickListener(new OnForbidClickListener() {
@Override
public void forbidClick(View view) {
Intent startFaceHome = new Intent(PParentInfoActivity.this, FaceHomeActivity.class);
startFaceHome.putExtra(FaceHomeActivity.FACE_USER_ID_KEY, mParentId);
startFaceHome.putExtra(FaceHomeActivity.FACE_IDENTITY_TYPE_KEY, 2);
startFaceHome.putExtra(FaceHomeActivity.FACE_SCHOOL_ID_KEY, PSPDataSession.I().getCurrentChildData().getSchoolId());
startActivity(startFaceHome);
}
});

其实跟上面的工具类是类似的,只不过将实现方式放入了重写的点击接口类里,也麻烦,但是至少会代码简洁一些

全局布尔值防止连续点击

其实上面的2个方式依然有可能被连点,比如点击后发送的是网络请求,请求完成后如果会finish Activity 就算你加了等待对话框,依然会有在等待对话框关闭 activity准备关闭的时候一直点击提交按钮的情况下触发第二次的网络请求.

所以下面方式就比较麻烦了,但是是能最好防止功能被连点的方式.所以一般是使用在网络请求上.

private boolean mPostAddApiing = false;

在请求接口的时候

mSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(mEditPhoneNumber.getText()) || mEditPhoneNumber.getText().toString().length() < 11) {
Toast.makeText(PParentAddActivity.this, "请输入正确的电话号码", Toast.LENGTH_SHORT).show();
return;
}
if (mEditVerificationCode.getText().toString().length() < 6) {
Toast.makeText(PParentAddActivity.this, "请输入正确的验证码", Toast.LENGTH_SHORT).show();
return;
}
if (!mPostAddApiing){
mPostAddApiing = true;
postAddApi();
} }
});

然后在接口回调里如果是成功就不在处理mPostAddApiing  直接关闭finish activity,如果是activity不用关闭/提交失败/网络异常/用户主动取消请求的情况下,都要操作 mPostAddApiing = false, 让按键恢复可以点击;

当然也可以使用下面的方式一样可以达到效果,只要在对应想要开关的地方处理点击,但是这个逻辑上就比较隐式了

mSubmit.setClickable(false);

Android 开发 防止按键连续点击的更多相关文章

  1. Android开发之按键、触摸屏和手势输入专业压力測试方法

    按键输入.触摸屏输入和手势笔画输入等功能是Android开发的基本功能.其稳定性和健壮性对移动应用系统开发很重要.按键.触摸屏和手势输入专业压力測试方法能够使用Monkey,相应用程序进行压力測试,检 ...

  2. Android开发欢迎页点击跳过倒计时进入主页

    没点击跳过自然进入主页,点击跳过之后立即进入主页     1.欢迎页布局activity_sp.xml放一张背景图(图片随你便啦)再放一个盛放倒计时的TextView   <?xml versi ...

  3. Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView

    目标需求 实现一张小图片,被点击后变成一个在整个屏幕上显示的大图片.类似于微信朋友圈的图片. 实现流程 1.Fresco基本初始化 2.下载并且导入ZoomableDraweeView 它是实现大图的 ...

  4. Android开发_关于点击事件

    为了防止用户或者测试MM疯狂的点击某个button: 创建一个工具类 public class Tools { private static long lastClickTime; public st ...

  5. <转>Android开发使输入框点击弹出日期选择对话框的方法

    非常简单直接上代码: 转自:http://blog.sina.com.cn/s/blog_4ac1b5f60102vgnx.html final EditText et1=(EditText)find ...

  6. Android开发-之监听button点击事件

    一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...

  7. Android开发探秘之一:创建可以点击的Button

    感觉到自己有必要学习下手机开发方面的知识,不论是为了以后的工作需求还是目前的公司项目. 当然,任何新东西的开始,必然伴随着第一个HelloWorld,Android学习也不例外.既然才开始,我就不做过 ...

  8. Android通过AOP实现防止按钮连续点击

    防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一个新的OnClickListener,在里面加上防多次点击的代码,然后项目中的所有OnClickList ...

  9. android防止按钮连续点击方案之AOP

    转载请标明出处http://www.cnblogs.com/yxx123/p/6675567.html 防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一 ...

随机推荐

  1. jq给页面添加覆盖层遮罩的实例

    先引入jq代码,然后代码如下: $(function(){ var docHeight = $(document).height(); //获取窗口高度 $('body').append('<d ...

  2. 阿里云启动视频云V5计划,全面赋能生态合作伙伴

    9月25 - 27日,主题为数·智的2019云栖大会在杭州举行.在第三天的智能视频云专场中,阿里云研究员金戈首次对外发布视频云V5计划,释放视频IT基础设施红利,赋能生态合作伙伴,共促大视频产业发展. ...

  3. Spring基础面试题(一)

    Spring是什么? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.常见的配置方式有 ...

  4. 二分查找总结及部分Lintcode题目分析 1

    进行二分查找课程回顾与总结,包括以下几个方面,二分法的模板总结和解题思路.应用. 二分法模板总结classical binary search: 1. 必须要做的排除极端情况,也就是数组(用A表示)不 ...

  5. day 55 Django基础五之django模型层(一)单表操作

      Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...

  6. (转)Linux使用RSA密钥登录远程服务器

    一切操作都在本机执行,不需要进入远程主机/服务器~~ 1.生成密钥.默认生成的是rsa加密. ssh-keygen 2.私钥是给本地的,公钥是给远程的.下面将公钥上传到远程服务器 ~ ssh-copy ...

  7. 内核下枚举进程 (二)ZwQuerySystemInformation

    说明: SYSTEM_INFORMATION_CLASS 的5号功能枚举进程信息.其是这个函数对应着ring3下的 NtQuerySystemInformation,但msdn上说win8以后ZwQu ...

  8. 【默默努力】fishingGame

    这个捕鱼游戏挺有意思的,通过发射子弹,打鱼.打鱼的子弹会消耗金币,但是打鱼如果打到了鱼,就会奖励金币的数量. 我如果写这个的话,应该会画一个 背景海底,然后生成很多鱼的图片,还要有一个大炮,金币.大炮 ...

  9. Codeforces 548E Mike ans Foam (与质数相关的容斥多半会用到莫比乌斯函数)

    题面 链接:CF548E Description Mike is a bartender at Rico's bar. At Rico's, they put beer glasses in a sp ...

  10. HNOI2018思记

    4-13 顺顺利利到了湖南.晚上认真研读cf毒瘤题题解,未果. 发现这里含铁丰富的高温多雨式红土地.以及窗户特别深,总有一圈小阳台的房子,门楣深邃如瞳. 看了一波miaom的ZJOI游记,思考了一下解 ...