2012-06-05 2 views
7

Я пытаюсь закончить свое главное меню в своем приложении. Я подумал, что было бы просто приятным прикосновением добавить AlertDialog в методе OnBackPressed. Однако по какой-то причине я получаю всевозможные ошибки.Android Prompting a AlertDialog onBackPressed

Я создал AlertDialog в OnBackPressed и покажу его, но приложение просто закрывается, когда я нажимаю кнопку «Назад», и я получаю ошибки, говорящие, что окно течет.

Любая идея, как исправить это? Я искал около 30 минут и не мог найти кого-либо еще с этой проблемой.

+0

Показать код 'onBackPressed()' ... хотя я не уверен, что то, что вы пытаетесь сделать, - хорошая идея. – Squonk

+1

AlertDialogs, которые отображаются при нажатии кнопки «Назад» (т. Е. Диалоги «подтвердить выход») *** сильно замедляют работу пользователя. Я сделал это раньше и был очень удивлен тем, насколько быстрее оказалось мое приложение, когда я удалил их в следующей версии. Не используйте их, если вы действительно, * действительно *, *** действительно *** нужно :). –

+0

@AlexLockwood вы бы сказали, что я действительно, действительно, ** действительно ** нужно показать диалог оповещений, если в противном случае изменения, внесенные пользователем, будут потеряны простым возвратом? – winklerrr

ответ

2

Я создал AlertDialog в OnBackPressed и покажу его, но приложение просто закрывается, когда я нажимаю кнопку «Назад», и у меня возникают ошибки, говорящие о том, что окно течет.

Если внутри вашего OnBackPressed вы звоните super.OnBackPressed(), то приложение завершится, так как это то, что базовая реализация OnBackPressed делает. Не вызывайте метод super, и приложение не закрывается.

30

Постарайтесь не называть super.OnBackPressed() этот код Шоул помочь:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        MyActivity.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 

} 
3

Если вы хотите вызвать super.onBackPressed(), используйте этот код:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //finish(); 
        MyActivity.this.onSuperBackPressed(); 
        //super.onBackPressed(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    /* 
    if (handleCancel()){ 
     super.onBackPressed(); 
    } 
    */ 
} 

public void onSuperBackPressed(){ 
    super.onBackPressed(); 
} 

I просто добавил новый публичный метод onSuperBackPressed с super -методом в MyActivity.

Спасибо, K_Anas за отличную идею.

Смежные вопросы