今天在做安卓应用时,有一个功能是点一下某个部件的时候弹出一个对话框,用的是onTouchListener,但是发现点击的时候弹出了两个窗口,观察输出,发现onTouch事件调用了两次:

Android onTouch方法调用了两次的问题_Android教程

怎么回事呢?

原来,onTouch事件在手指按下和离开的时候分别调用了一次。

那么我只需要弹出一个窗口,也就是触发一次,怎么修改呢?

答案就是判断一下当前的onTouch事件是正在按下还是正在离开,用的是其中一个给定的参数:MotionEvent 类型的 event,当本次onTouch是离开时,阻止程序继续执行即可:

cop_province.setOnTouchListener(new View.OnTouchListener() {
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		//阻止手指离开时onTouch方法的继续执行
		if(event.getAction() == MotionEvent.ACTION_UP){
			return true;
		}
也就是说,onTouch还是执行两次,但第二次的弹窗操作被制止了,也就达到了效果。

看来,对于看似简单的Touch事件,Android的设计者们远比我们想得周到。