Я пытаюсь сделать горизонтальный вид прокрутки для сетки. Я преуспел в горизонтальном просмотре прокрутки. Но теперь мне нужно реализовать onItemClickListener тоже для одного и того же вида сетки. Я использовал GestureDetector.SimpleOnGestureListener и onTouchEvent для горизонтальной прокрутки. Если я использую этот onItemClickListener, он не работает. Кон, помогите мне заставить обоих работать. Заранее спасибо.Как использовать ontouchevent() с прослушивателем onitemclick?
ответ
Мне недавно пришлось иметь дело с одной и той же проблемой, и именно так я ее решил.
Во-первых, я переопределяю прослушиватель onListItemClick
по умолчанию в ListFragment/ListActivity. Затем в методе onTouchEvent
я установил условие, когда true, вызывает вызов ListView onListItemClick
. Этот вызов выполняется, когда действие равно MotionEvent.ACTION_UP
, и это условие было выполнено. Сначала вы должны решить, какая группа событий представляет собой щелчок для вашего представления. Я объявил себя как ACTION_DOWN
, а затем ACTION_UP
. Когда вы будете готовы выполнить команду onListItemClick
, вам необходимо передать вид, позицию и идентификатор фактического объекта в метод.
См. Мой пример ниже.
Class....{
private boolean clickDetected = true;
public boolean onTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
final int x = (int) ev.getX();
final int y = (int) ev.getY();
//if an action other than ACTION_UP and ACTION_DOWN was performed
//then we are no longer in a simple item click event group
//(i.e DOWN followed immediately by UP)
if (action != MotionEvent.ACTION_UP
&& action != MotionEvent.ACTION_DOWN)
clickDetected = false;
if (action == MotionEvent.ACTION_UP){
//check if the onItemClick requirement was met
if (clickDetected){
//get the item and necessary data to perform onItemClick
//subtract the first visible item's position from the current item's position
//to compensate for the list been scrolled since pointToPosition does not consider it
int position = pointToPosition(x,y) - getFirstVisiblePosition();
View view = getChildAt(position);
if (view != null){//only continue if a valid view exists
long id = view.getId();
performItemClick(view, position, id);//pass control back to fragment/activity
}//end if
}//end if
clickDetected= true;//set this to true to refresh for next event
}//end if
return super.onTouchEvent(ev);
....
}//end onTouchEvent
}//end class
Эта установка позволит много гибкости, например, если вы хотите создать длинный клик вы можете сделать то же самое, что и выше, и простая проверка на разницу во времени между ACTION_DOWN и ACTION_UP.
Другой подход заключается в том, чтобы получить позицию элемента, который инициировал действие, и проверить его против одного для действия вверх и даже выбросить критерии дифференциального по времени для действия вниз и вверх (скажем, менее 1 секунды) ,
- 1. Проблема с прослушивателем Onclick внутри прослушивателя OnItemClick
- 2. Как использовать onTouchEvent?
- 3. Как использовать ButterKnife OnItemClick с RecyclerView? не
- 4. Разница между прослушивателем мыши и прослушивателем действий?
- 5. Как использовать метод OnItemClick в списке?
- 6. Проблемы с прослушивателем ICMP
- 7. Радиостанция с прослушивателем действий
- 8. Проблемы с прослушивателем событий
- 9. GWT FileUpload с прослушивателем хода
- 10. Проблемы с прослушивателем с Canvas
- 11. Функция ForEach с прослушивателем событий
- 12. TextView с onTouchEvent
- 13. Проблема с Android onTouchEvent()
- 14. AlertDialog MultiChoiceItems Проблемы с прослушивателем
- 15. Как получить слово DocumentBeforeSaveEvent с ole-прослушивателем?
- 16. Как работает ontouchevent() edittext?
- 17. Как отключить onTouchEvent
- 18. Использование графики с прослушивателем клавиш
- 19. динамический текст с сенсорным прослушивателем
- 20. Андроид родительский onTouchEvent угон ребенка onTouchEvent
- 21. RecyclerView с кнопкой onItemClick
- 22. Как реализовать onTouchEvent() в фрагменте?
- 23. Анонимная анимация с прослушивателем анимации
- 24. Проблема, связанная с прослушивателем класса
- 25. Как разрешить клики в onTouchEvent
- 26. ListView с onItemClick postion
- 27. Проблемы с простым прослушивателем UDP
- 28. Проблема с прослушивателем Socket Java?
- 29. webView onTouchEvent
- 30. Переопределение onTouchEvent, конкурирующего с ScrollView
Хороший aproach, это то, для чего я был логин. Во всяком случае, я хотел бы упомянуть, что это не сработает на некоторых недорогих устройствах. Недавно я заметил, что при тестировании моего нового приложения, в то время как на samsung, asus, gigabite (и т. Д. На обычных устройствах) наблюдалось зарегистрированное ACTION_DOWN, которое немедленно сопровождалось действием ACTION_UP, на недорогих устройствах оно было ACTION_DOWN -> ACTION_MOVE -> ACTION_UP. – vanomart