Как переопределить кнопку «Назад» для отображения оповещения на вкладке «Активность» в Android - PullRequest
0 голосов
/ 30 ноября 2011

Я реализовал вкладку в моем приложении.Теперь я хочу выйти из приложения с отображением предупреждения «Вы уверены» перед закрытием приложения.

Я пытался это сделать с помощью методов onKeyDown () и onBackPressed (), но каждый раз, когда это вызывает исключение Window BadToken.

В чем может быть проблема и возможное решение этой проблемы?

посмотрите на stackTrace из LogCat

Thread [<1> main] (Приостановлено (исключение WindowManager $ BadTokenException))

ViewRoot.deliverKeyEventToViewHierarchy(KeyEvent, boolean) line: 2523   

ViewRoot.handleFinishedEvent(int, boolean) line: 2443   

ViewRoot.handleMessage(Message) line: 1735  

ViewRoot(Handler).dispatchMessage(Message) line: 99

Looper.loop() line: 123 

ActivityThread.main(String[]) line: 4633    

Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  

Method.invoke(Object, Object...) line: 521  

ZygoteInit$MethodAndArgsCaller.run() line: 858  

ZygoteInit.main(String[]) line: 616

NativeStart.main(String[]) line: not available [native method]  

1 Ответ

2 голосов
/ 30 ноября 2011

Сначала вы добавляете переменную экземпляра к вашему Activity, которая может сообщить вам, нажимается ли она при первом нажатии кнопки назад (логическое значение, которое должно быть false по умолчанию - инициализируйте его в onCreate):

private boolean exiting;

Затем переопределить onBackPressed():

@Override
public void onBackPressed() {
  if( !exiting )
    new ExitDialog( this ) ).show();
  else
    super.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;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...