处理Android硬件后退按钮

处理Android硬件后退按钮,android,back-button,Android,Back Button,我有一个onKeyDown事件,它只用于处理我应用程序中的上下硬件键。对于这些,在处理时返回true。 对于其他任何东西,它返回false,我理解这意味着操作系统应该处理它们。 但是,当我按下后退按钮时,我的onKeyDown被调用并返回false,但没有其他效果。我希望/期望操作系统完成当前的活动并恢复上一个活动 这是正确的行为,还是有什么问题 更新: 干杯,伙计们,我的onKeyDown例程看起来是这样的,现在我遵循了Commonware的建议: @Override public boole

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

这是正确的行为,还是有什么问题

更新:

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

@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);
}
我必须承认,我不知道为什么@override和第一个“super”行在那里,它们只是在我看到的所有例程中。 如果super.onKeyDown为活动运行onKeyDown,那么我可能不希望在开始时使用它,只有在我的例程无法处理它的情况下才会使用它,我想这是我添加的。 这听起来是对的,还是我仍然感到困惑


-Frink

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

return(false);
做:


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

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

是否在Web视图上尝试此操作?请注意,如果不进行编辑以返回
super.onKeyDown()的值,则不会调用
onBackPressed()
return(false);
return(super.onKeyDown(...));