当我的活动弹出一个对话框时,我的活动的onBackPressed()不会被调用

时间:2011-11-16 18:25:17

标签: android

我有实现onBackPressed(),当我的活动没有弹出警告对话框时,它可以正常工作。但是当我的活动弹出一个对话框时,onBackPressed()永远不会被调用。

public void onBackPressed() {
        super.onBackPressed();
// more implementation.
}

当弹出对话框时,如何检测用户是否按下后退键?

谢谢。

4 个答案:

答案 0 :(得分:2)

这样的事,应该做的工作。

public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        yourpopup.dismiss();  // or whatever you want todo here
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

答案 1 :(得分:2)

那么,在这种情况下,Dialog#onBackPressed()将被调用,这是预期的行为。

答案 2 :(得分:0)

那是因为你的Activity在那时没有焦点。您必须在弹出的对话框中添加一个按钮监听器。

答案 3 :(得分:0)

您还可以创建自己的自定义弹出消息类,该类扩展AlertDialog.Builder,并使用Java界面在弹出窗口(即是/否,提交/取消按钮)上处理用户选择。

这就是我这样做的方式,因此我可以使用自己的自定义警报弹出消息窗口处理警告和错误,其他警报。

我没有在自定义弹出消息类中做任何特殊操作来处理被按下的后退按钮。

但是,我确实处理了调用我的自定义弹出消息类的activity类中按下的后退按钮。

/**
   * onKeyDown method
   * 
   * Executes code depending on what keyCode is pressed.
   * 
   * @param int keyCode
   * @param KeyEvent
   *          event KeyEvent object
   * 
   * @return true if the code completes execution, false otherwise
   * 
   */
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);
    switch (keyCode) {
    case KeyEvent.KEYCODE_BACK:
      //handle the back-key press here

    default:
      return false;
    }
  }// end onKeyDown