在 NativeScript 中用 onKeyUp/onKeyDown 扩展 Activity,但是没有触发事件

Extending Activity with onKeyUp/onKeyDown in NativeScript, but the Events are not triggered

我按照 NativeScript 教程在这个页面上扩展了 Activity:

https://docs.nativescript.org/core-concepts/android-runtime/advanced-topics/extend-application-activity

扩展的 activity 起作用了,所以我继续添加了我自己的 onKeyUp 和 onKeyDown 代码:

onKeyDown: function (keyCode, event) {
    console.log(keyCode);
    return this._callbacks.onKeyDown(this, keyCode, event, superProto.onKeyDown);
},
onKeyUp: function (keyCode, event) {
    console.log(keyCode);
    return this._callbacks.onKeyUp(this, keyCode, event, superProto.onKeyUp);
},

我通过在 onCreate 中添加一个 console.log 来打印一条消息,以确保我修改的 Activity 正在使用。 Activity 仍然有效(正如我在日志中看到的那样),但是 onKeyUp 和 onKeyDown 从未被触发。同时,当我按下后退按钮时,教程中示例 Activity 中的 onBackPressed 事件被正确触发(我添加了一个 console.log 来检查)。

仅供参考,我知道软件键盘可能不会触发这两个按键事件,但我使用的是蓝牙键盘。我还验证了蓝牙键盘确实已连接并正常工作。

感谢 Manoj 的帮助,我找到了答案。首先,我原来的问题与代码无关。在我按照 Manoj 的建议进行干净构建后,两个关键事件被触发而没有任何问题。

但这带来了另一个问题。正如 Manoj(再次)提到的,我不能简单地调用超类的 onKeyUponKeyDown 因为 this._callbacks 不包含这两个成员。

我决定根本不捕捉 onKeyUponKeyDown 中的按键事件。相反,我选择覆盖 dispatchKeyEvent。同样,我遇到了同样的问题,我如何调用超级 dispatchKeyEvent?事实证明我不能简单地做:

    dispatchKeyEvent: function (event) {
        console.log("Dispatch Key Event");
        return superProto.dispatchKeyEvent (event);
    }

如果我这样做,我会收到一条错误消息:Java脚本实例不再有可用的 Java 实例副本。

相反,我需要按以下方式调用超级 dispatchKeyEvent

    dispatchKeyEvent: function (event) {
        console.log("Dispatch Key Event");
        return superProto.dispatchKeyEvent.call(this, event);
    }

这太棒了!