Tengo una actividad que contiene varios elementos editables por el usuario (un campo EditText, RatingBar, etc.). Me gustaría avisar al usuario si se presiona el botón Atrás/Inicio y se han realizado cambios que aún no se han guardado. Después de leer la documentación de Android, parece que este fragmento de código debe ir en el método onPause. Intenté poner un AlertDialog en OnPause, pero se muestra el cuadro de diálogo y luego se corta inmediatamente porque no hay nada para evitar que se complete la pausa.Android: Pedir al usuario que guarde los cambios cuando se presiona el botón Atrás
Esto es lo que he encontrado hasta el momento:
@Override
protected void onPause() {
super.onPause();
AlertDialog ad = new AlertDialog.Builder(this).setMessage(
R.string.rating_exit_message).setTitle(
R.string.rating_exit_title).setCancelable(false)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// User selects OK, save changes to db
}
}).setNeutralButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// User selects Cancel, discard all changes
}
}).show();
}
estoy en el camino correcto o hay otra manera de lograr lo que estoy tratando de hacer aquí? ¡Cualquier ayuda sería genial!
Utilizando el método onKeyDown() tendrá los mismos problemas que onPause(). Si intento mostrar un cuadro de diálogo de alerta en el bloque onKeyDown cuando detecto el código clave Atrás, el cuadro de diálogo aún no se bloqueará. Veré la alerta momentáneamente hasta que se presione el super.onKeyDown, lo que hará que se cierre la ventana. ¿Hay alguna manera de forzar una respuesta al AlertDialog antes de continuar? – chriskopec
¿Está llamando a super.onKeyDown() si consume el botón Atrás? Supongo que debería usar "devolver verdadero" si abre el diálogo, para indicarle al sistema que ha consumido el botón Atrás, presione; de lo contrario, al llamar a super(), igual finalizará llamando a todas las cosas que terminan la actividad. –
Eso es todo, ¡Gracias! – chriskopec