为了对付拥有麒麟臂的测试人员或者用户对我们的按钮等控件展开惨无人道的快速啄击。厮以为可以用如下方法:

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 快速点击的处理的更多相关文章

  1. Android上按钮解决快速点击问题

           //代码2         public abstract class NoDoubleClickListener implements OnClickListener {        ...

  2. 解决Android中多次点击(快速点击多次 )启动多个相同界面的问题

    通过以下代码可以解决这个问题. /** * 防止快速点击 * @param ev * @return */ @Override public boolean dispatchTouchEvent(Mo ...

  3. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  4. Hello, Android 快速入门

    Hello, Android Android 开发与 Xamarin 简介 在这两节指南中,我们将 (使用 Xamarin Studio或 Visual Studio)建立我们的第一个 Xamarin ...

  5. Android 快速开发系列 打造万能的ListView GridView 适配器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...

  6. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  7. 利用Kotlin扩展函数实现任意View的点击处理(点击效果和防止快速点击)

    利用Kotlin扩展函数实现View的点击处理(点击效果和防止快速点击) kotlin经典写法: view?.setOnClickListener { //实现 } 项目实践证明,这种写法存在问题 例 ...

  8. UIButton快速点击,只执行最后一次

    button快速点击时,会导致,同一动作执行多次,常用解决办法: 第一种方法:推荐 //取消执行 [[self class] cancelPreviousPerformRequestsWithTarg ...

  9. AndroidAnnotations(Code Diet)android快速开发框架

    最近用了一款很不错的android快速开发框架,1000行的代码瞬间变成几百行,不用你会后悔的 特点: (1) 依赖注入:包括view,extras,系统服务,资源等等(2) 简单的线程模型,通过an ...

随机推荐

  1. Windows2000源代码 200+MB

    全球最大的软件制造商微软2月12日警告公众称其一部分珍贵的Windows NT和Windows 2000操作系统源代码被泄漏到了一些在线文件共享网络中. 微软称被泄漏的代码只是整个程序的一小部分,但这 ...

  2. ABAP CDS Table Function介绍与示例

    Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS. 如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种 ...

  3. cygwin下java报错“找不到或无法加载主类”的故障排除

    win7 下安装了java,命令行下可以正常运行,cygwin下报错:找不到或无法加载主类. 经排查发现是cygwin的~/.bash_profile中画蛇添足的配置了$CLASSPATH: JAVA ...

  4. 【剑指Offer学习】【面试题21:包括min 函数的栈】

    题目: 定义栈的数据结构,请在该类型中实现一个可以得到栈的最小素的min 函数.在该栈中.调用min.push 及pop的时间复杂度都是0(1) 解题思路: 把每次的最小元素(之前的最小元素和新压入战 ...

  5. HDU 1013.Digital Roots【模拟或数论】【8月16】

    Digital Roots Problem Description The digital root of a positive integer is found by summing the dig ...

  6. IIS中遇到无法预览的问题(HTTP 错误 401.3 - Unauthorized 因为 Web server上此资源的訪问控制列表(ACL)配置或加密设置,您无权查看此文件夹或页面。)

    在IIS中  依次运行例如以下操作: 站点--编辑权限--共享(为了方便能够直接将分享对象设置为everyone)--安全(直接勾选 everyone )--应用--确定.

  7. 怎样提升 RailS 应用的性能?

    Is rails slow? 「铁路非常慢」,你或许听过这个笑话,那么我们的 Rails 框架呢? 假设说 Rails 慢,那么怎样提升 Rails APP 的性能就成了开发人员们最关注的问题. 或许 ...

  8. 导出Excel1 - 项目分解篇

    我们在全部的MIS系统(信息管理系统)中都能见到他.所以我们把这个通用功能提出来. 项目名称:车辆信息管理系统(中石化石炼) 项目负责人:xiaobin 项目时间:2006.12 - 2007.2 E ...

  9. jquery实现ajax提交表单

    一般情况下,我们提交form表单采用的是submit的方法,典型的场景如下. <form id="thisForm" method="post" acti ...

  10. SSM学习(三)--集成spring mvc

    spirng mvc是一个mvc框架,与struts2类似,都是基于Servlet封装而成的框架,所以要了解spring mvc或者struts2比需先了解Servlet,本篇我们先把spring m ...