2012-06-05 26 views
7

Estoy tratando de terminar mi menú principal en mi aplicación. Pensé que sería un simple toque agradable agregar un AlertDialog en el método OnBackPressed. Sin embargo, por alguna razón, estoy recibiendo todo tipo de errores.Android Solicitud de AlertDialog onBackPressed

Creé el AlertDialog en OnBackPressed y lo demuestro, pero la aplicación simplemente se cierra cuando presiono el botón Atrás y recibo errores que dicen que la ventana está goteando.

¿Alguna idea de cómo solucionar esto? Busqué durante aproximadamente 30 minutos y no pude encontrar a nadie más con este problema.

+0

Muestra el código para 'onBackPressed()' ... aunque no estoy seguro de que lo que intentas hacer sea una buena idea. – Squonk

+1

AlertDialogs que se muestran cuando se presiona el botón Atrás (es decir, "confirmar la salida" de los cuadros de diálogo) *** severamente * ralentiza la experiencia del usuario. Lo he hecho antes y me sorprendió lo mucho más rápido que parecía ser mi aplicación cuando los quité en una versión posterior. No los uses a menos que realmente, * realmente *, *** realmente *** necesites :). –

+0

@AlexLockwood diría, que realmente, realmente, ** realmente ** necesito mostrar un cuadro de diálogo de alerta si de lo contrario los cambios que realiza un usuario se perderían simplemente volviendo atrás? – winklerrr

Respuesta

2

Creé el AlertDialog en el OnBackPressed y lo demuestro, pero la aplicación simplemente se cierra cuando presiono el botón Atrás y recibo errores que dicen que la ventana está goteando.

Si dentro de su OnBackPressed que está llamando super.OnBackPressed() entonces la aplicación terminará, ya que eso es lo que hace la implementación base de OnBackPressed. No llame al método super, y la aplicación no se cerrará.

30

Trate de no llamar super.OnBackPressed(), este código shoul ayudar:

@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

Si desea llamar super.onBackPressed() utilizar este código:

@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 acaba de agregar un nuevo método público onSuperBackPressed con el super -metodo a MyActivity.

Gracias va a K_Anas por proporcionar la excelente idea.

Cuestiones relacionadas