今天做安卓应用时,为某个部件设置了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设计者的高超的思维水平!