Blackberry Storm Touch События
Я перенес приложение Blackberry 4.6.0 в шторм на 4.7.0. Все работает отлично, кроме событий касания, которые я пытаюсь контролировать. Я перехватываю события касания в методе ниже, который делает как положено, но проблема в том, что после выполнения моей логики в touchEvent и возврата всегда отображается меню (которое активируется с помощью кнопки меню). Я попытался вернуть false, true и super.touchEvent (message), но он все еще появляется.
Любые идеи о том, как я могу предотвратить появление меню после захвата сенсорного события?
protected boolean touchEvent(TouchEvent message)
{
if (message.getEvent() == TouchEvent.CLICK)
{
//My code here
}
}
Ваши мысли высоко ценятся
2 ответа
Просто чтобы уточнить ответ haagmm:
После отправки TouchEvent.CLICK в ваше приложение также будет отправлено событие navigationClick. Это из соображений совместимости, поэтому такие вещи, как ButtonFields, будут работать на устройстве с сенсорным экраном, даже если приложение не было явно написано для ответа на touchEvents.
Если событие navigationClick не используется (возвращает true) полем в вашем приложении, отобразится контекстное меню.
Если вы видите такое поведение при нажатии на поле кнопки, объяснение состоит в том, что по умолчанию ButtonFields не использует события нажатия. Я обнаружил, что это хорошая практика - всегда создавать ButtonFields со следующими установленными битами стиля:
ButtonField myButtonField =
new ButtonField( ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY );
Код haagmm является одним из решений, но лучше скопировать код обработки TouchEvent.CLICK, а также вставить его в метод navigationClick. Таким образом, устройство для трекбола, такое как BlackBerry Tour, все равно сможет использовать ваше приложение.
Если вы "щелкаете" по экрану или щелкаете левой кнопкой мыши в симе, вы запускаете контекстное меню, аналогично нажатию на трекбол на устройстве 4.6.
Вам нужно будет сделать что-то похожее на поле, в которое вы перегрузили touchEvent:
protected boolean navigationClick(int status, int time) { return true; }