今天做安卓应用时,为某个部件设置了onTouch方法,但里面什么都没写,就直接return了。

cop_province.setOnTouchListener(new View.OnTouchListener() {
	@Override
	public boolean onTouch(View v, MotionEvent event) {return true;}
});

后来修改方法,又为它设置了onClick方法,但是发现点击上去没反应,难道这个部件不支持onClick方法?然后来忽然想到会不会是因为之前设置的onTouch方法对onClick方法有影响?于是试着把setOnTouchListener的方法去掉了,然后onClick方法就起作用了。

那么,是不是有了onTouch就不能有onClick呢?这想想就不合常理。

观察一下,onTouch方法强制有个返回值,要么true,要么false,刚才是返回 ture,onClick不执行,那如果是返回 false 呢?试着修改一下onTouch,让它返回false:

public boolean onTouch(View v, MotionEvent event) {return false;}

然后再试,发现onClick事件已经可以执行了~

好了,再结合之前查过的资料,那么结论基本出来了:

onTouch如果返回true,意思就是Touch执行完了,并且也不许后面的动作跟进了。

onTouch如果返回false,意思就是Touch虽然执行完了,但后面的动作继续跟进,该咋咋地。

并且,如果不声明,onTouch默认是返回false的,也就是不干涉后面的动作。


再一次赞叹Android设计者的高超的思维水平!