Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1566590
  • 博文数量: 113
  • 博客积分: 3526
  • 博客等级: 中校
  • 技术积分: 1815
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-08 09:46
个人简介

记录总结自己的工作

文章分类

全部博文(113)

文章存档

2015年(19)

2014年(10)

2013年(6)

2012年(16)

2011年(24)

2010年(21)

2009年(17)

分类: Android平台

2015-01-05 10:31:16

    在Android开发过程中我们经常会碰到这样的问题,当用户点击一个View启动一个新的Activity的时候,如果快速地多次点击就会启动多个相同的界面。虽然说很少会有用户这么玩自己的手机,但是一旦出现这样的情况确实是很不好的体验。刚好前段时间研究过lanchmode,那我们把要启动的Acitivity改为singleTop,这样最上面只能有一个相同的界面,问题应该解决了吧?实验了一下,只能说基本满足要求了,但是有一些特殊情况如使用startActivityForResult启动的时候还是不好用。下面来一劳永逸地解决这个问题吧。

     首页,在项目中我们要创建一个父类Activity,就叫FatherActivity吧,实践证明,项目中使用这么一个父类真是好处多多啊,在这里就不一一列举了。然后需要重写一下父类的dispatchTouchEvent方法,仅仅需要几行代码。思想就是每次有按下的事件的时候做一下时间间隔的判断,如果是快速点击就直接拦截下来。

点击(此处)折叠或打开

  1. @Override
  2.     public boolean dispatchTouchEvent(MotionEvent ev) {
  3.         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
  4.             if (Util.isFastDoubleClick()) {
  5.                 return true;
  6.             }
  7.         }
  8.         return super.dispatchTouchEvent(ev);
  9.     }
    对于快速点击的判断,我们可以自己定义想要的事件间隔,在这里我定义的是一秒钟:

点击(此处)折叠或打开

  1. public static boolean isFastDoubleClick() {
  2.         long time = System.currentTimeMillis();
  3.         long timeD = time - lastClickTime;
  4.         lastClickTime = time;
  5.         return truetimeD <= 1000;
  6.     }
    最后只要让所有的Activity都继承FatherActivity就可以了。





阅读(12338) | 评论(2) | 转发(0) |
1

上一篇:Activity的launchMode

下一篇:centos 下安装gitlab

给主人留下些什么吧!~~

云少嘎嘎嘎2015-05-04 09:26:56

smartelf:你好,我最近正遇到这个问题,想参考您的解决方法试一下,请问isFastDoubleClick方法里的lastClickTime是如何取得的??

在else里不是给它赋值了吗?

回复 | 举报

smartelf2015-04-27 10:30:25

你好,我最近正遇到这个问题,想参考您的解决方法试一下,请问isFastDoubleClick方法里的lastClickTime是如何取得的??