8

我有一个onKeyDown事件,只需要在我的应用程序中处理向上和向下硬件键。对于这些,它在处理时返回 true。对于其他任何事情,它都会返回 false,我理解这意味着操作系统应该处理它们。但是,当我按下后退按钮时,onKeyDown调用 my 并返回 false,但没有其他效果。我希望/希望操作系统完成当前Activity并恢复上一个。

这是正确的行为,还是有什么不对?

更新:

干杯伙计们,我的 onKeyDown 例程看起来像这样,现在我遵循了 CommonsWare 的建议:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);

    boolean handled = true;

    // handle key presses
    switch (keyCode) {

    case KeyEvent.KEYCODE_DPAD_LEFT:
        mCursorX = mCursorX - 1;
        if (mCursorX < MAP_MIN_X) { mCursorX = MAP_MIN_X; }
        break;

    case KeyEvent.KEYCODE_DPAD_RIGHT:
        mCursorX = mCursorX + 1;
        if (mCursorX > MAP_MAX_X) { mCursorX = MAP_MAX_X; }
        break;

    default:
        handled = false;

    if (handled) {
        redrawCursorno();
        return true;
    }

    return super.onKeyDown(keyCode,event);
}

我的课看起来像:

public class Map extends Activity implements OnClickListener, SurfaceHolder.Callback, OnTouchListener {

我必须承认我不知道为什么@override 和第一个“超级”行在那里,它们只是在我查看的所有例程中。如果 super.onKeyDown 为 Activity 运行 onKeyDown,那么我可能一开始就不想要它,只有在我的例程不处理它的时候才想要它,我认为这是我添加的。这听起来是对的,还是我仍然感到困惑?

-弗林克

4

3 回答 3

6

我建议链接到超类。换句话说,而不是:

return(false);

做:

return(super.onKeyDown(...));
于 2010-08-22T10:23:28.863 回答
4

您可以覆盖 onBackPressed() 方法,当活动检测到用户按下返回键时,将调用该方法。在这种情况下,您不需要使用 onKeyDown 方法。

于 2010-08-22T12:27:09.767 回答
1

此外,您调用 super.onKeyDown() 两次:一次在函数开头,一次在结尾。你应该只需要最后一个。

于 2010-08-22T19:45:14.580 回答