现在我有了这个:
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做出反应?
另外,如果我删除事件类型(以便在焦点更改时,无论操作如何都执行代码?没有任何反应我放入显示的对话框,不显示意味着事件永远不会输入。任何建议?
感谢
答案 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()。