Скрытие клавиатуры, когда элемент управления теряет фокус? - PullRequest
1 голос
/ 02 сентября 2010

Теперь у меня есть это:

public void focusChanged(Field field, int eventType) {
    if ( field == txtAmount && eventType == 1)
    {
        getVirtualKeyboard().setVisibility(VirtualKeyboard.HIDE);
    }           
}

Теперь моя проблема в том, что клавиатура не прячется.Я думаю, что ошибка в параметре eventType.Какой номер идентифицирует событие LostFocus?Я жестко запрограммировал «1» для тестов, но, похоже, он не работает.

FocusChangeListener focusListener;

    //In the constructor:
    txtAmount = new EditField(Field.FIELD_RIGHT);
    txtAmount.setFocusListener(focusListener);

public void focusChanged(Field field, int eventType) {
    if ( field == txtAmount && eventType == 1)
    {
            Dialog.alert("iasdi");
        getVirtualKeyboard().setVisibility(VirtualKeyboard.HIDE);
    }           
}

почему это не работает?Есть ли enum или что-то, что я могу использовать, чтобы выбрать, на какой eventType я должен реагировать?

Кроме того, если я удаляю тип события (чтобы код выполнялся независимо от действия именно тогда, когда фокус меняется правильно?происходит диалоговое окно, которое я вставил для показа, не отображается, означая, что событие никогда не вводится. Любые предложения?

спасибо

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

eventType может быть одной из следующих констант, объявленных в классе FocusChangeListener:

public static final int FOCUS_GAINED = 1; public static final int FOCUS_CHANGED = 2; public static final int FOCUS_LOST = 3;

!!! Используйте FOCUS_LOST = 3 вместо FOCUS_GAINED = 1 для обработки события потери фокуса.

Кроме того, проверьте, имеет ли метод null getVirtualKeyboard () возвращаемое значение, поскольку он возвращает ноль на сенсорных устройствах без виртуальной клавиатуры (например, Bold 9700).

public static void hideVirtualKeyboard() {
    if (net.rim.device.api.ui.VirtualKeyboard.isSupported()) {
        Screen screen = UiApplication.getUiApplication().getActiveScreen();
        if (null != screen) {
            net.rim.device.api.ui.VirtualKeyboard vk = screen
                    .getVirtualKeyboard();
            if (vk != null) {
                vk.setVisibility(net.rim.device.api.ui.VirtualKeyboard.HIDE);
            }
        }
    }
}
0 голосов
/ 02 сентября 2010

Для сопоставления eventType попробуйте использовать константы, определенные в FocusChangeListener вместо жесткого кодирования "1". В этом случае вы, вероятно, захотите использовать FocusChangeListener.FOCUS_LOST.

Что касается кода, который не работает, вы фактически устанавливаете значение переменной "focusListener"? Исходя из кода, который вы опубликовали, вы этого не сделаете, и он будет просто передаваться как «ноль» в setFocusListener ().

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