OnItemClickListener и OnItemLongClickListener в ListView [duplicate]

UPDATE: Действительно умные люди быстро указали на этот ответ , который объясняет странность, описанную ниже

ОРИГИНАЛЬНЫЙ ОТВЕТ:

я знаю, помогает ли это кому-либо, но я был застрял с той же проблемой, даже когда делал что-то вроде правды. В моем основном методе у меня есть такой код:

ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {
        "common.xml",
        "token.xml",
        "pep-config.xml" });
    TokenInitializer ti = context.getBean(TokenInitializer.class);

и в файле token.xml у меня была строка


Я заметил, что пакет .path больше не существует, поэтому я просто положил строку навсегда.

И после этого NPE начал заходить. В pep-config.xml у меня было всего 2 боба:



и класс SomeAbac имеет свойство, объявленное как

@Autowired private Settings settings;

по неизвестной причине, настройки null в init (), когда элемент отсутствует вообще, но когда он присутствует и имеет некоторые bs в качестве basePackage, все работает Что ж. Теперь эта строка выглядит так:


, и она работает. Может быть, кто-то может дать объяснение, но для меня это достаточно прямо сейчас)

100
задан mellowg 25 March 2011 в 03:59
поделиться

3 ответа

Из Слушатели событий :

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

Вы возвращаете true из своего onLongClick() и все еще получаете нормальный click event?

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

228
ответ дан erichamion 23 August 2018 в 00:37
поделиться
  • 1
    Для установки опции myListView.setOnItemLongClickListener(this); вам необходимо переопределить функцию public boolean onItemLongClick(...). Здесь вам просто нужно return true, что указывает на то, что LongClick был активирован и отменит триггер при обычном щелчке. Если вы вернете false, это вызовет обычный щелчок. – Brandon 2 March 2015 в 15:41
  • 2
    как насчет другой ситуации, когда мне нужно различать длительный щелчок и обычный щелчок, чтобы принять меры в соответствии с этим – Muhammed Refaat 1 November 2017 в 09:43
  • 3
    @erichamion Я попробовал ваше решение для аналогичной проблемы, без везения. Я был бы признателен за любые идеи или мысли, которые вы могли бы предоставить, расположенный здесь: stackoverflow.com/questions/47783631/… – AJW 16 December 2017 в 04:25

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

14
ответ дан Alex Lockwood 23 August 2018 в 00:37
поделиться
  • 1
    Я добавил true в свой метод onLongClick, но все еще имею проблему в том, что мой метод onClick не запускается после этого. Я был бы признателен за любые мысли или идеи о том, как их решить, расположенный здесь: stackoverflow.com/questions/47783631/… – AJW 16 December 2017 в 04:28

Повторение ответа в более простых выражениях:

Предоставлено:

@Override
public boolean onLongClick(View view) {

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

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

25
ответ дан Suragch 23 August 2018 в 00:37
поделиться
  • 1
    Супер совершенный ответ, если мы поместим истинное значение, тогда он обрабатывает только длинный клик, если мы помещаем false, тогда и щелчок, и длительное событие пресса происходят сразу – Pir Fahim Shah 3 December 2017 в 09:23
Другие вопросы по тегам:

Похожие вопросы: