前言

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

用工具类实现

/**
*@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. thinkphp 插件控制器

    3.2.2版本开始支持插件控制器的调用,可以通过更加方便的URL地址访问到模块中的插件定义的控制器. 当URL中传入插件控制器变量的时候,会自动定位到插件控制器中的操作方法. 大理石平台精度等级 插件 ...

  2. Http学习(二)

    使用首部字段是为了给浏览器和服务器提供报文主体大小.所使用语言.认证信息等 4种首部字段类型 通用首部字段 请求首部字段 响应首部字段 实体首部字段 详细说明: HTTP首部字段类型 通用首部字段: ...

  3. 进程通信类型 管道是Linux支持的最初Unix IPC形式之一

    管道 Linux环境进程间通信(一) https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/index.html 管道及有名管道 郑彦兴200 ...

  4. 基于UDP协议的套接字编程

    基于udp协议的套接字编程 UDP是无链接的,先启动那一端都不会报错 UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到 一般不用与传输大数据 虽然没有粘包问题,但是不能 ...

  5. AYITOJ-括号序列-栈的入门

    题目描述 给定一个由括号组成的字符串 问其是否为一个合法的括号序列 合法的括号序列的定义如下 1. 空字符串是合法的括号序列 2. 若字符串A是合法的括号序列, 那么{A},[A],(A)也是合法的括 ...

  6. 学SpringBoot一篇就够了

    1.SpringBoot概述 Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 ...

  7. LeetCode 28.实现strStr()(Python3)

    题目: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存 ...

  8. 【默默努力】vue-pc-app

    最近在github上面看到了一个团队的项目,真的非常赞.他们进行vue-cli的二次开发,将项目用自己的方式打包. 今天的这个开源项目地址为:https://github.com/tffe-team/ ...

  9. 【五校联考5day1】登山

    题目 描述 题目大意 给你一个n∗nn*nn∗n的网格图.从(0,0)(0,0)(0,0)开始,每次只可以向右或向上移动一格,并且不能越过对角线(即不能为x<yx<yx<y). 网格 ...

  10. this指针/常函数、常对象

    this指针引入 类中对象的成员变量和成员函数是分开存储的,sizeof(空class) = 1,另外示例中涉及到字节对齐的问题,double本身的字节为8,int为4,由于字节对齐,int也为8,所 ...