【问题标题】:Handling Android hardware Back button处理 Android 硬件后退按钮
【发布时间】:2011-04-02 05:41:15
【问题描述】:

我有一个 onKeyDown 事件,它仅用于处理我的应用程序中的向上和向下硬件键。对于这些,它在处理时返回 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,那么我可能一开始就不想要它,只有在我的例程不处理它的时候才想要它,我认为这是我添加的。 这听起来是对的,还是我仍然感到困惑?

-弗林克

【问题讨论】:

  • 你是在 webview 上尝试这个吗?

标签: android back-button


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以重写 onBackPressed() 方法,它会在活动检测到用户按下返回键时被调用。在这种情况下,您不需要使用 onKeyDown 方法。

    【讨论】:

    • 注意onBackPressed()不会在没有编辑返回super.onKeyDown()的值的情况下被调用
    【解决方案3】:

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

    return(false);
    

    做:

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

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2011-10-26
      • 2017-06-20
      • 2019-01-13
      相关资源
      最近更新 更多