在 NativeScript 中用 onKeyUp/onKeyDown 扩展 Activity,但是没有触发事件
Extending Activity with onKeyUp/onKeyDown in NativeScript, but the Events are not triggered
我按照 NativeScript 教程在这个页面上扩展了 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(再次)提到的,我不能简单地调用超类的 onKeyUp 和 onKeyDown 因为 this._callbacks 不包含这两个成员。
我决定根本不捕捉 onKeyUp 和 onKeyDown 中的按键事件。相反,我选择覆盖 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);
}
这太棒了!
我按照 NativeScript 教程在这个页面上扩展了 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(再次)提到的,我不能简单地调用超类的 onKeyUp 和 onKeyDown 因为 this._callbacks 不包含这两个成员。
我决定根本不捕捉 onKeyUp 和 onKeyDown 中的按键事件。相反,我选择覆盖 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);
}
这太棒了!