El cuadro de diálogo se muestra dos veces cuando se pulsa de nuevo
En el código, el diálogo se muestra dos veces cuando presiono el botón de retroceso. ¿Puede alguien por favor decirme cómo obtener el diálogo sólo una vez?
public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { onBackPressed(); } return super.onKeyDown(keyCode, event); } public void onBackPressed() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to save configuration?"); builder.setPositiveButton ("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //here saveConfiguration is boolean type if (saveConfiguration()) { dialog.dismiss(); finish(); } else { dialog.dismiss(); } } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); finish(); } }); builder.show(); } }
- Soft teclado sin EditText y la detección de pulsaciones de teclas
- Anulación del botón de retroceso
- Android: Cómo llamar a MediaController para avanzar y retroceder rápidamente usando KeyEvents
- AutoCompleteTextView detecta cuando se selecciona la entrada de la lista editada por el usuario
- Android: Cómo controlar el botón de inicio
- OnKeyListener no funciona en el teclado virtual
- Cómo utilizar diferentes onKeyDown en fragmento de una misma actividad
- Problema onKeyDown ()
- Fake KeyEvent no funciona * exactamente * como el botón "real". ¿Por qué?
- Llamar a funciones javascript en una vista web desde la clase de actividad
- Actividad de fragmento catch onKeyDown y uso en fragmento
- Android onkey - dispatchKeyEvent sin disparar
Su diálogo viene dos veces porque está consumiendo dos eventos desde la tecla de retroceso, es decir, la tecla hacia abajo y la tecla hacia arriba .. restringir a cualquiera de ellos.
if (event.getAction() != KeyEvent.ACTION_DOWN) { /* Now call onBackPressed method here */ }
OnBackPressed () es un método de actividad estándar
Lo que estás haciendo, está llamando a este método de onKeyDown manualmente, y luego llamarlo de nuevo por evento delegataing más a través de super.onKeyDown (keyCode, evento) (que registra, que presionó de nuevo y llama a onBackPressed () automáticamente);
Si desea trabajar con el evento de tecla back pressed, thet o bien quitar el método onKeyDown entierly y utilizar sólo onBackPressed (), o cambiar el nombre de su onBackPressed () para ser algo único.