Android 快速点击的处理
为了对付拥有麒麟臂的测试人员或者用户对我们的按钮等控件展开惨无人道的快速啄击。厮以为可以用如下方法:
1 setEnabled 大法;在用户点击发生后调用setEnable(false);阻止持续受到伤害。而onClick中的处理逻辑执行完后再调用setEnable(true);进行迎击。此法代码多,且逻辑难处理,不推荐。
2 DoubleKill 大法;对于一些不想改动现有逻辑的童鞋可以选用该方法,样例如下:
定义:
public final class DoubleKill {
final static long CLICK_INTERVAL = 500L;// 允许的快速点击间隔
private final static HashMap<Integer, Long> mLastClickTime = new HashMap();
static long lastTime(int key) {
return mLastClickTime.containsKey(key) ? mLastClickTime.get(key) : 0L;
}
static void lastTime(int key, long lastTime) {
mLastClickTime.put(key, lastTime);
}
public static boolean isFastDoubleClick(View view) {
int key = view.hashCode();
long currTime = System.currentTimeMillis();
if (currTime - lastTime(key) < CLICK_INTERVAL) {
return true;
} else {
lastTime(key, currTime);
return false;
}
}
} 调用:
view.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(DoubleKill.isFastDoubleClick(view)){
return;
}
// 其他代码。。。。
}
});
3 继承大法;对于新开项目可以手动实现OnClickListener来进行阻击,废话不说,上代码:
定义:
public abstract class SingleClickListener<iCallView extends View> implements View.OnClickListener {
final static long CLICK_INTERVAL = 500L;
protected long mLastClickTime = 0L;
@Override
public final void onClick(View v) {
if (System.currentTimeMillis() - mLastClickTime < CLICK_INTERVAL) {
return;
}
mLastClickTime = System.currentTimeMillis();
click((iCallView) v);
}
public abstract void click(iCallView view);
} 调用:
view.setOnClickListener(new SingleClickListener<TextView>() {
@Override
public void click(TextView view) {
Toast.makeText(mCxt, "轻点!疼", Toast.LENGTH_SHORT).show();
}
});
此结!
Android 快速点击的处理的更多相关文章
- Android上按钮解决快速点击问题
//代码2 public abstract class NoDoubleClickListener implements OnClickListener { ...
- 解决Android中多次点击(快速点击多次 )启动多个相同界面的问题
通过以下代码可以解决这个问题. /** * 防止快速点击 * @param ev * @return */ @Override public boolean dispatchTouchEvent(Mo ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- Hello, Android 快速入门
Hello, Android Android 开发与 Xamarin 简介 在这两节指南中,我们将 (使用 Xamarin Studio或 Visual Studio)建立我们的第一个 Xamarin ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- 利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)
利用Kotlin扩展函数实现View的点击处理(点击效果和防止快速点击) kotlin经典写法: view?.setOnClickListener { //实现 } 项目实践证明,这种写法存在问题 例 ...
- UIButton快速点击,只执行最后一次
button快速点击时,会导致,同一动作执行多次,常用解决办法: 第一种方法:推荐 //取消执行 [[self class] cancelPreviousPerformRequestsWithTarg ...
- AndroidAnnotations(Code Diet)android快速开发框架
最近用了一款很不错的android快速开发框架,1000行的代码瞬间变成几百行,不用你会后悔的 特点: (1) 依赖注入:包括view,extras,系统服务,资源等等(2) 简单的线程模型,通过an ...
随机推荐
- 大白话Vue源码系列目录
.first-level{ font-size: 1.2rem; cursor: default; color: #666; } .second-level{ font-size: 1.1rem; p ...
- JPA学习笔记(8)——映射双向一对多关联关系
双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...
- Python&MySQL&PyQt
环境: Python2.7+MySQL5.6+PyQt4 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/40 ...
- Asp.net MVC 简单实现生成Excel并下载
由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式 ...
- map对象拷贝问题
map对象赋值: HashMap<String,Object> hm = new HashMap(); HashMap<String,Object> hmCopy = new ...
- 数据库——MongoDB——>Java篇
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产 ...
- 在Eclipse中如何关联源代码
我们就以Struts2框架为例,展示在Eclipse中如何关联源代码.例如,在Struts2框架的学习中,我们有时需要查看ActionSupport这个类的源码,这个时候就要在Eclipse中关联源代 ...
- lua中怎么替换掉字符串中的$^特殊字符?
Lua 常规替换字符串如何替换 s = string.gsub("Lua is good", "good", "bad") print(s) ...
- SSH连接工具:SecureCRT设置,另一个SSH连接工具:Xshell。在Windows和Linux之间互传文件可用WinSCP
一般Linux发行版不允许root远程登录,CentOS允许. 调整字体大小:
- JavaScript 中 apply 、call 的详解
apply 和 call 的区别 ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已. 原文作者:林 ...