我在Android中有一個ListView,我想有行視圖和父ListView本身的onTouchListeners。我想要單獨響應單擊和長按,但要在整個ListView上掠過。 (我可以單獨爲每個行設置onFling方法,但它不是健壯的,因爲用戶可以在行之間移動他的手指。)我能夠成功地爲行和ListView分別設置onTouchListener,但是當我同時設置,ListView偵聽器從不觸發 - 只有行偵聽器。無論我在行監聽器的方法中是否返回true或false,都是這種情況。是否有人知道如何觸發onTouchListeners的視圖和它的父母,因爲他們佔用屏幕上的相同像素?單獨的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;
}
}
列表視圖中各行的相關代碼:
在適配器類的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;
}
}
絕對的,但讓我問你:你丟滾動或扔左/右? – 2012-01-05 13:24:17
從左到右。我正在使用它來切換活動。 – pvans 2012-01-06 04:27:44