当控件失去焦点时隐藏键盘?

时间:2010-09-02 15:58:00

标签: user-interface blackberry

现在我有了这个:

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);
    }           
}

为什么这不起作用?是否有一个枚举或其他东西可以用来选择我应该对哪种eventType做出反应?

另外,如果我删除事件类型(以便在焦点更改时,无论操作如何都执行代码?没有任何反应我放入显示的对话框,不显示意味着事件永远不会输入。任何建议?

感谢

2 个答案:

答案 0 :(得分:1)

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()方法返回值,因为它在没有虚拟键盘的触摸设备上返回null(如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);
            }
        }
    }
}

答案 1 :(得分:0)

为匹配eventType,请尝试使用FocusChangeListener中定义的常量而不是硬编码“1”。在这种情况下,您可能希望使用FocusChangeListener.FOCUS_LOST

对于代码未运行的情况,您实际上是否设置了“focusListener”变量的值?从你发布的代码中,你不是,它只是作为“null”传递给setFocusListener()。