Blackberry Storm TouchСобытия - PullRequest
3 голосов
/ 12 мая 2009

Я перенес приложение 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 ]

6 голосов
/ 07 июня 2009

Просто чтобы уточнить ответ Хагмма:

После отправки 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, все еще сможет использовать ваше приложение.

3 голосов
/ 13 мая 2009

Если вы «щелкаете» по экрану или щелкаете левой кнопкой мыши в симе, вы запускаете контекстное меню, аналогично нажатию на трекбол на устройстве 4.6.

Вам нужно будет сделать что-то похожее на поле, в которое вы перегрузили touchEvent:

 protected boolean navigationClick(int status, int time) { return true; }
...