【问题标题】:How do I detect the 'delete' key in my Field subclass?如何检测我的 Field 子类中的“删除”键?
【发布时间】:2010-10-30 19:59:57
【问题描述】:

我正在尝试检测并覆盖黑莓键盘上的 Delete 键。

由于某种原因,它从来没有在我的 case 语句中出现,因为它达到了这一点:

Keypad.key(keycode) == 8
Keypad.KEY_DELETE == 127

我的错误是什么?

public class MyField extends ListField implements KeyListener {
// ...
/** Implementation of KeyListener.keyDown */
public boolean keyDown(int keycode, int time) {
    boolean retval = false;
    switch (Keypad.key(keycode)) {
    /* DELETE - Delete the timer */
    case Keypad.KEY_DELETE:
        if (Keypad.status(keycode) == KeyListener.STATUS_SHIFT) {
            _myDeleteCmd.run();
            retval = true;
        }
        break;

    default:
        retval = super.keyDown(keycode, time);
    }
    return retval;
}

【问题讨论】:

    标签: blackberry keyboard-events keydown keylistener


    【解决方案1】:

    键事件很可能在到达此字段之前已被另一个 KeyListener.keyDown 函数消耗。您可以通过在 keyDown() 实现中设置断点来轻松测试这一点,以确保应用程序到达该点。

    要使用按键事件,KeyListener 函数只需要返回 true。确保默认情况下您没有为任何其他 keyDown 实现返回 true,以确保每个实现只使用它使用的键。

    【讨论】:

    • 去过那里,做到了。在问题中添加了相关值。嘿,当我们在做的时候,谁在活动中抢先一步?系统 -> 应用程序 -> 屏幕 -> 管理器 -> 字段?
    • Keypad.KEY_BACKSPACE = 8;这是您需要检查的值。我不确定两者之间的区别,但它们经常放在一起。不是 100% 的订单。我相信你是对的。应用程序有一个事件分派器,它将事件分派到活动屏幕,然后由活动屏幕分派到屏幕的管理器和字段。但是,我确定那时会订购。我猜它会按照添加到屏幕的顺序通过每个经理,并且每个经理的字段都相同。
    • 啊...退格,不是删除。明白了 :) 谢谢!
    猜你喜欢
    • 2016-03-30
    • 2014-10-11
    • 2012-08-18
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多