Android: почему долгий щелчок одновременно вызывает обычный щелчок?

У меня есть ListView со слушателями для долгого и обычного щелчка.

Почему, когда я долго нажимаю на элемент списка, вызывается и обычное событие щелчка?

Мне нужно иметь две отдельные функции для разных кликов.


person mellowg    schedule 25.03.2011    source источник


Ответы (4)


Из прослушивателей событий:

onLongClick () - Это возвращает логическое значение, чтобы указать, использовали ли вы событие, и его не следует переносить дальше. То есть, верните true, чтобы указать, что вы обработали событие и на этом нужно остановиться; верните false, если вы не обработали его и / или событие должно продолжаться для любых других прослушивателей щелчка.

Вы возвращаетесь true из своего onLongClick() и по-прежнему получаете обычное событие щелчка?

Отредактировано для добавления: для ListView вы можете использовать OnItemLongClickListener. _ 4_ здесь используется аналогичное логическое возвращаемое значение, чтобы указать, было ли обработано событие.

person erichamion    schedule 25.03.2011
comment
Для установки параметра myListView.setOnItemLongClickListener(this); вам необходимо переопределить функцию public boolean onItemLongClick(...). Здесь вам просто нужно return true, что означает, что LongClick был активирован и отменяет триггер при обычном нажатии. Если вы вернете false, он также вызовет обычный щелчок. - person Brandon; 02.03.2015
comment
как насчет другой ситуации, когда мне нужно различать длинный щелчок и нормальный щелчок, чтобы предпринять действия в соответствии с этим - person Muhammed Refaat; 01.11.2017
comment
@erichamion Я попробовал ваше решение для аналогичной проблемы, но безуспешно. Буду признателен за любые идеи или мысли, которые вы могли бы предоставить, расположенные здесь: stackoverflow.com/questions/47783631/ - person AJW; 16.12.2017

Перефразируя ответ проще:

Данный:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return true означает, что событие потреблено. Это обработано. Никакие другие события щелчка не будут уведомлены.
  • return false означает, что событие не используется. Уведомления о любых других событиях щелчка будут по-прежнему приходить.

Поэтому, если вы не хотите, чтобы onClick также запускался после onLongClick, вам следует return true из события onLongClick.

person Suragch    schedule 29.11.2016
comment
Супер идеальный ответ, если мы установим истинное значение, тогда он будет обрабатывать только долгий щелчок, если мы поставим false, тогда как щелчок, так и длительное нажатие происходят одновременно - person Pir Fahim Shah; 03.12.2017

Убедитесь, что вы переопределяете OnClickListener для своего onClick метода. Также убедитесь, что вы переопределяете OnLongClickListener для своего onLongClick метода. И убедитесь, что ваш метод onLongClick возвращает true, так как он будет использовать onClick.

person Alex Lockwood    schedule 26.06.2012
comment
Я добавил true в свой метод onLongClick, но проблема в том, что мой метод onClick после этого не срабатывает. Буду признателен за любые мысли или идеи о том, как решить эту проблему, расположенные здесь: stackoverflow.com/questions/47783631/ - person AJW; 16.12.2017

Вы можете реализовать setOnLongClickListener создание экземпляра new View.OnClickListener() или new View.OnLongClickListener(), если вы создадите длинный щелчок и реализуете обычный OnclickListener, вы получите эти ошибки при активации метода одним щелчком. Вы должны использовать new View.OnLongClickListener() для захвата только длинных кликов

person Matheus Padovani    schedule 17.06.2020