今天在做安卓应用时,有一个功能是点一下某个部件的时候弹出一个对话框,用的是onTouchListener,但是发现点击的时候弹出了两个窗口,观察输出,发现onTouch事件调用了两次:
怎么回事呢?
原来,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的设计者们远比我们想得周到。