我在 Android 中有一个 ListView,我想为行视图和父 ListView 本身设置 onTouchListeners。我想单独响应对行的单击和长按,但要对整个 ListView 进行响应。(我可以为每一行单独设置 onFling 方法,但它并不可靠,因为用户可以跨行移动手指。)我能够成功地分别为行和 ListView 设置 onTouchListener,但是当我设置两者,ListView 侦听器永远不会触发 - 只有行侦听器。无论我在行侦听器的方法中返回 true 还是 false,都是这种情况。鉴于它们在屏幕上占据相同的像素,有人知道如何为视图及其父级触发 onTouchListeners 吗?
ListView 的相关代码:
在活动 onCreate 方法中:
mListViewDetector = new GestureDetector(new ListViewGestureListener());
mListViewListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return mListViewDetector.onTouchEvent(event);
}
};
mListView = getListView();
mListView.setOnTouchListener(mListViewListener);
以及自定义的 GestureListener 类(定义为活动中的嵌套类):
class ListViewGestureListener extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.i("ListViewGestureDetector","onFling");
return false;
}
}
Listview中各个行的相关代码:
在适配器类的bindView方法中:
TextView textView;
textView.setOnTouchListener(new ListsTextViewOnTouchListener());
以及自定义的 onTouchListener 类(定义为适配器类中的嵌套类):
class ItemsTextViewOnTouchListener implements OnTouchListener {
public boolean onTouch (View v, MotionEvent event){
switch(event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
//stuff
return false;
case MotionEvent.ACTION_CANCEL:
//stuff
return false;
default:
break;
}
return false;
}
}