У меня есть ListView в Android, и я хотел бы иметь onTouchListeners для представлений строк и родительского ListView. Я хотел бы ответить на одиночные краны и длинные нажатия на строки по отдельности, но на выбросы в ListView в целом. (Я могу установить метод onFling для каждой из строк по отдельности, но он не является надежным, так как пользователь может переместить палец по строкам.) Я могу успешно установить onTouchListener для строк и ListView отдельно, но когда я set both, ListView listener никогда не запускается - только прослушиватели строк. Это случай, верю ли я 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;
}
}
Соответствующий код для отдельных строк в 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;
}
}
Абсолютно, но позвольте мне спросить вас: Вы швыряя прокручивать или швыряя влево/вправо? –
Слева направо. Я использую его для переключения между действиями. – pvans