前言
原創文章,歡迎轉載,請保留出處。
有任何錯誤、疑問或者建議,歡迎指出。
我的郵箱:[email protected]
當我們重寫ListView的OnTouchEvent方法時,通常都會switch一下MotionEvent的action,檢查符合一定條件是return true,比如重寫ListView添加下拉重新整理時出現下拉重新整理時容易誤點Item出發點選事件或者出發長按事件。
例子
先看看下面的代碼,我忽略了非關鍵部分:
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN :
// ...
break;
case MotionEvent.ACTION_MOVE :
if (...) {
// 下拉重新整理邏輯...
return true;//這裡攔截了觸摸事件
}
break;
case MotionEvent.ACTION_UP :
// ...
break;
}
return super.onTouchEvent(ev);
}
分析
發現OnTouchEvent中條件出發下拉重新整理邏輯後直接
return true;
而沒有執行到
super.onTouchEvent(ev);
方法,在
super.onTouchEvent(ev);
方法中有可以解決ListView觸摸事件和點選Item事件沖突的代碼,可以防止下拉重新整理時容易誤點Item出發點選事件或者出發長按事件。
解決
在
return ture;
前調用
super.onTouchEvent(ev);
,代碼如下:
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN :
// ...
break;
case MotionEvent.ACTION_MOVE :
if (...) {
// 下拉重新整理邏輯...
super.onTouchEvent(ev);//調用父類方法,防止滑動時觸發點選事件
return true;//這裡攔截了觸摸事件
}
break;
case MotionEvent.ACTION_UP :
// ...
break;
}
return super.onTouchEvent(ev);
}