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, все работает Что ж. Теперь эта строка выглядит так:
, и она работает. Может быть, кто-то может дать объяснение, но для меня это достаточно прямо сейчас)
Из Слушатели событий :
onLongClick () - Это возвращает логическое значение, указывающее, было ли вы использовано событие, и оно должно не переносятся дальше. То есть верните true, чтобы указать, что вы обработали событие, и он должен остановиться здесь; return false, если вы не обработали его, и / или событие должно продолжаться для любых других прослушивателей щелчков.
blockquote>Вы возвращаете
true
из своегоonLongClick()
и все еще получаете нормальный click event?Отредактировано для добавления: для ListView вы можете использовать
OnItemLongClickListener
. ВonItemLongClick()
используется аналогичное логическое возвращаемое значение, чтобы указать, потребляло ли оно событие.
Убедитесь, что вы переопределяете OnClickListener
для вашего метода onClick
. Также убедитесь, что вы переопределяете OnLongClickListener
для вашего метода onLongClick
. И убедитесь, что ваш метод onLongClick
возвращает true
, так как это будет потреблять onClick
.
Повторение ответа в более простых выражениях:
Предоставлено:
@Override
public boolean onLongClick(View view) {
return true; // or false
}
return true
означает, что событие уничтожено. Он обрабатывается. Никакие другие события кликов не будут уведомлены. return false
означает, что событие не используется. Любые другие события клика будут продолжать получать уведомления. Итак, если вы не хотите, чтобы onClick
также запускался после onLongClick
, вы должны return true
из onLongClick
.
myListView.setOnItemLongClickListener(this);
вам необходимо переопределить функциюpublic boolean onItemLongClick(...)
. Здесь вам просто нужноreturn true
, что указывает на то, что LongClick был активирован и отменит триггер при обычном щелчке. Если вы вернете false, это вызовет обычный щелчок. – Brandon 2 March 2015 в 15:41