Обработка событий Blackberry и проблемы фокуса - PullRequest
0 голосов
/ 15 июня 2011

У меня проблема с небольшим приложением blackberry, в котором события касания обрабатываются одним из двух определенных полей, в которых есть фокус.

В моем случае у меня есть 2 изображения, одно сверху (первый элемент на экране) и снизу (последний элемент добавлен на экран. Оба являются подклассами BitmapField. Их цель - показать веб-сайт когда пользователь нажимает (щелкает трекпадом / мячом).

Проблема в том, что когда любой из них имеет фокус, независимо от того, где пользователь нажимает на экран (т.е. в EditField, другой пользовательской кнопке или просто части фона), BitmapField, который имеет фокус, использует вызовы событий веб-браузер. Это, очевидно, только проблема на симуляторе BB Torch, и я строил для BB OS 5.0.

У меня есть BitmapField, потребляющий как навигационные щелчки, так и сенсорные события.

Кроме того, было бы полезно узнать, как получить хорошее (как не написано в RIM) руководство по обработке событий для Blackberry API.

UPDATE: Я пытался:

    public boolean isFocusable() {
        return false;
    }

Но в идеале мне бы хотелось, чтобы это работало на таких устройствах, как Curve и Bold.

ОБНОВЛЕНИЕ 2: Внутри менеджеров компоновки есть пара LabelFields, которые могут получить фокус, но они не вызывают эту проблему, это происходит только тогда, когда у BitmapFields есть фокус.

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Я бы предложил создать поле кнопки пользовательского изображения путем подкласса из Field. Переопределите paint(Graphics graphics), чтобы нарисовать изображение и сфокусированную границу (или фон). Затем просто переопределите navigationClick(int status, int time). Инфраструктура пользовательского интерфейса BB будет вызывать этот метод, когда пользователь нажимает ваше поле на сенсорном экране. Также это будет работать для устройств без сенсорного экрана. Как большое преимущество - вам не нужно беспокоиться о TouchEvent с вообще.

1 голос
/ 15 июня 2011

Убедитесь, что на touchEvent() вы проверяете местоположение касания.Если он выходит за пределы вашего BitmapField, вы должны вернуть super.touchEvent(message).Независимо от того, где находится касание, когда поле имеет фокус, оно отправляется ему первым, чтобы определить, должно ли оно обрабатывать его вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...