如何在Android中覆盖后退按钮以在选项卡活动中显示警报

如何在Android中覆盖后退按钮以在选项卡活动中显示警报,android,tabs,Android,Tabs,我已经在我的应用程序中实现了Tab。现在我想退出应用程序,在应用程序关闭前显示“确定”警报 我试过这个 onKeyDown()和onBackPressed()方法,但每次都会出现Window BadToken异常 可能存在的问题和可能的解决方案是什么 请查看LogCat的stackTrace 线程[main](挂起(异常WindowManager$BadTokenException)) 首先,在活动中添加一个实例变量,该变量可以告诉您是否是第一次按下后退按钮(默认情况下,布尔值应为false——

我已经在我的应用程序中实现了Tab。现在我想退出应用程序,在应用程序关闭前显示“确定”警报

我试过这个 onKeyDown()和onBackPressed()方法,但每次都会出现Window BadToken异常

可能存在的问题和可能的解决方案是什么

请查看LogCat的stackTrace

线程[main](挂起(异常WindowManager$BadTokenException))


首先,在
活动中添加一个实例变量
,该变量可以告诉您是否是第一次按下后退按钮(默认情况下,布尔值应为
false
——在
onCreate
中初始化它):

然后重写
onBackPressed()

ExitDialog
应如下所示:

private class ExitDialog extends AlertDialog implements OnClickListener {
  protected ExitDialog( Context context ) {
    super( context );

    setTitle( "Exit?" );
    setMessage( "Are you sure you want to exit?" );
    setButton( BUTTON_POSITIVE, "Yes", this );
    setButton( BUTTON_NEGATIVE, "No", this );
  }

  public void onClick( DialogInterface dialog, int which ) {
    switch( which ) {
      case BUTTON_POSITIVE:
        exiting = true;
        dialog.dismiss();
        MyActivity.this.onBackPressed();
        break;
      case BUTTON_NEGATIVE:
        exiting = false;
        dialog.dismiss();
        break;
    }
  }
}

请发布相关代码以及异常的堆栈跟踪。感谢您的快速回复,但我仍然收到相同的BadTokenException,我认为Tab界面导致了问题…请在您的问题中发布LogCat的堆栈跟踪。
private boolean exiting;
@Override
public void onBackPressed() {
  if( !exiting )
    new ExitDialog( this ) ).show();
  else
    super.onBackPressed();
}
private class ExitDialog extends AlertDialog implements OnClickListener {
  protected ExitDialog( Context context ) {
    super( context );

    setTitle( "Exit?" );
    setMessage( "Are you sure you want to exit?" );
    setButton( BUTTON_POSITIVE, "Yes", this );
    setButton( BUTTON_NEGATIVE, "No", this );
  }

  public void onClick( DialogInterface dialog, int which ) {
    switch( which ) {
      case BUTTON_POSITIVE:
        exiting = true;
        dialog.dismiss();
        MyActivity.this.onBackPressed();
        break;
      case BUTTON_NEGATIVE:
        exiting = false;
        dialog.dismiss();
        break;
    }
  }
}