Android 开发 防止按键连续点击
前言
按键防止连续点击是任何一个项目都要考虑的功能.下面我们将介绍几种防止按键连续点击的方法
用工具类实现
/**
*@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 开发 防止按键连续点击的更多相关文章
- Android开发之按键、触摸屏和手势输入专业压力測试方法
按键输入.触摸屏输入和手势笔画输入等功能是Android开发的基本功能.其稳定性和健壮性对移动应用系统开发很重要.按键.触摸屏和手势输入专业压力測试方法能够使用Monkey,相应用程序进行压力測试,检 ...
- Android开发欢迎页点击跳过倒计时进入主页
没点击跳过自然进入主页,点击跳过之后立即进入主页 1.欢迎页布局activity_sp.xml放一张背景图(图片随你便啦)再放一个盛放倒计时的TextView <?xml versi ...
- Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView
目标需求 实现一张小图片,被点击后变成一个在整个屏幕上显示的大图片.类似于微信朋友圈的图片. 实现流程 1.Fresco基本初始化 2.下载并且导入ZoomableDraweeView 它是实现大图的 ...
- Android开发_关于点击事件
为了防止用户或者测试MM疯狂的点击某个button: 创建一个工具类 public class Tools { private static long lastClickTime; public st ...
- <转>Android开发使输入框点击弹出日期选择对话框的方法
非常简单直接上代码: 转自:http://blog.sina.com.cn/s/blog_4ac1b5f60102vgnx.html final EditText et1=(EditText)find ...
- Android开发-之监听button点击事件
一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...
- Android开发探秘之一:创建可以点击的Button
感觉到自己有必要学习下手机开发方面的知识,不论是为了以后的工作需求还是目前的公司项目. 当然,任何新东西的开始,必然伴随着第一个HelloWorld,Android学习也不例外.既然才开始,我就不做过 ...
- Android通过AOP实现防止按钮连续点击
防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一个新的OnClickListener,在里面加上防多次点击的代码,然后项目中的所有OnClickList ...
- android防止按钮连续点击方案之AOP
转载请标明出处http://www.cnblogs.com/yxx123/p/6675567.html 防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一 ...
随机推荐
- layui实现已知被选中的option,怎样渲染
在项目中用到layui实现第几个option 实现,在select中渲染出需要展示的option 代码: $("#period option[value="+res.data.se ...
- Java中的常量池
JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的 ...
- CommonsMultipartResolver 文件上传
依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fi ...
- jmeter+ant+jenkins 搭建接口自动化测试环境
过程参考:http://www.cnblogs.com/lxs1314/p/7487066.html 1. 安装ant 2. 安装jenkins 遇到问题: 启动Tomcat后,访问http://lo ...
- The Python Standard Library
The Python Standard Library¶ While The Python Language Reference describes the exact syntax and sema ...
- PAT甲级——A1123 Is It a Complete AVL Tree【30】
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- Map、可变参数、静态导入、Collections、Arrays、集合嵌套
Map双列集合 key 键 value 值 方法: put(K, V) //判断key值是否相等,相等,覆盖元素,不相等,存储 remove(K) Map集合的遍历(不要看到java提供了很多方法做一 ...
- 批量更新mysql表数据
1.批量更新表中某个字段,如果表比较大,每条记录都执行一条update,1s执行10条数据,10万条数据就要1W秒,3个多小时. 2.可以用case when 来实现,模板如下 UPDATE cate ...
- 6_4.springboot2.x数据整合springData介绍
介绍 Spring Data 项目的目的是为了简化构建基于Spring 框架应用的数据访问技术,包括非关系数据库.Map-Reduce 框架.云数据服务等等:另外也包含对关系数据库的访问支持. spr ...
- 转为win64后, MS的lib问题
> 正在创建库 C:\Users\Administrator\Desktop\branch-Unicode-156\\Temp\Link\PointCloudMeasure\x64 ...