处理Android硬件返回按钮

8
我有一个 onKeyDown 事件,仅用于处理应用程序中的上和下硬件键。对于这些键,它返回 true,因为它们已被处理。对于其他任何键,它都返回 false,我理解这意味着操作系统应该处理它们。但是,当我按 Back 按钮时,我的 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'。如果 super.onKeyDown 运行 Activity 的 onKeyDown,则我可能不想在开头添加它,只有在我的例程未处理它时才添加,这是我添加的内容。这样说是否正确,还是我还是困惑了?

-Frink


你是在尝试在 WebView 上运行吗? - Sephy
3个回答

6

我建议使用超类链。换句话说,不要这样写:

return(false);

做:

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

4

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


请注意,如果不编辑以返回super.onKeyDown()的值,则不会调用onBackPressed() - Richard Le Mesurier

1
此外,你调用super.onKeyDown()两次:一次在函数开头,一次在结尾。你只需要在结尾处调用一次即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接