下面方法虽然解决了连续点击问题,但也会造成页面滑动时卡顿现象(即第二次滑动时,无响应)


经过认证,发现最好的解决方法是使用手势GestureDetector 。通过定义一个手势识别,其中有一个函数


@Override
public boolean onDoubleTap(MotionEvent e) {
return true;


,双击返回true即可。

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


点击(此处)折叠或打开

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.        if (timeD >= 0 && timeD <</span>= 1000) {
5.            return true;
6.        } else {
7.            lastClickTime = time;
8.            return false;
9.        }
10.    }


下面方法虽然解决了连续点击问题,但也会造成页面滑动时卡顿现象(即第二次滑动时,无响应)


经过认证,发现最好的解决方法是使用手势GestureDetector。通过定义一个手势识别,其中有一个函数


@Override



public boolean onDoubleTap(MotionEvent e) {



return true;



},双击返回true即可。




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



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




点击(此处)折叠或打开


@Override 
 public boolean dispatchTouchEvent(MotionEvent ev) { 
 if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
 if (Util.isFastDoubleClick()) { 
 return true; 
 } 
 } 
 return super.dispatchTouchEvent(ev); 
 }



对于快速点击的判断,我们可以自己定义想要的事件间隔,在这里我定义的是一秒钟:


public static boolean isFastDoubleClick() { 


 long time = System.currentTimeMillis(); 


 long timeD = time - lastClickTime; 


 if (timeD >= 0 && timeD <</span>= 1000) { 


 return true; 


 } else { 


 lastClickTime = time; 


 return false; 


 } 


 }



最后只要让所有的Activity都继承FatherActivity就可以了。