Вопрос

Я портировал приложение Blackberry 4.6.0 на Storm на 4.7.0.Все работает нормально, за исключением событий касания, которые я пытаюсь контролировать.Я ловлю события прикосновения в приведенном ниже методе, который, как это предполагается, но проблема в том, что моя логика в TouchEvent выполняет и всегда отображается меню (это активируется через кнопку меню).Я пробовал возвращать false, true и super.touchEvent(message), но оно все равно появляется.

Есть идеи, как предотвратить появление меню после перехвата события касания?

protected boolean touchEvent(TouchEvent message)
{
     if (message.getEvent() == TouchEvent.CLICK)
     {
        //My code here
     }
}

Ваши мысли очень ценны

Это было полезно?

Решение

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

После отправки 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; }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top