代碼案例如下:
lvXxsdMore.setOnItemClickListener(xxsdMoreListener); //對listView 注冊onclick事件 lvXxsdMore.setOnScrollListener(new WScrollListener()); //監聽ListView 的上下滑動事件 lvXxsdMore.setOnTouchListener(new OnTouchListener() { //對ListView注冊觸屏事件 @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP){ if(MainInfoActivity.flXxsdYgzHsqj.getVisibility() == View.VISIBLE){ MainInfoActivity.flXxsdYgzHsqj.setVisibility(View.GONE); } } return false; } });
如果上述代碼中,onTouch返回的是TRUE則,OnItemClickListener 與 OnScrollListener兩個事件不會被觸發。
Touch事件的執行流程:
ACTION_DOWN -> ACTION_MOVE -> ACTION_UP -> OnClick/OnLongClick
View首先會先響應ACTION_DOWN事件,並返回一個boolean值:
a:返回True,表示該View接受此按下動作,就是說這個點擊動作的按下操作被中止,然后就是響應ACTION_UP事件。點擊動作的按下操作被ACTION_DOWN接受之后就結束了,所以之后的OnClick/OnLongClick事件就不會響應了。
b:返回false,表示該View不接受此按下動作,響應完之后,按下操作繼續往下發,之后是響應ACTION_UP事件,
這里又有一個判斷:
如果ACTION_UP事件返回True,表示ACTION_UP接受松開操作,松開操作中止;View會一直處於按下狀態,之后View便會響應OnLongClick事件。
如果ACTION_UP事件返回false,表示ACTION_UP不接收松開操作,松開操作繼續下發;因為按下與松開操作都沒有被中止,所以之后View就會響應OnClick事件