处理Android硬件后退按钮

时间:2010-08-22 09:15:44

标签: android back-button

我有一个onKeyDown事件,只有在我的应用中处理Up和Down硬件键时才需要。对于这些,它返回true,因为它们被处理。 对于其他任何东西,它返回false,我理解这意味着操作系统应该处理它们。 但是,当我按下后退按钮时,我的onKeyDown被调用并返回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,那么我可能不希望它在开始时,只在最后如果我的例程不处理它,我认为这是我添加的。 这听起来是对的,还是我仍然感到困惑?

-Frink

3 个答案:

答案 0 :(得分:6)

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

return(false);

做的:

return(super.onKeyDown(...));

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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