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; }
Другие вопросы по тегам