2011-05-10 26 views
5

En el código, el cuadro de diálogo se muestra dos veces cuando presiono el botón Atrás. ¿Alguien puede decirme cómo obtener el diálogo una sola vez?Diálogo que se muestra dos veces cuando se presiona el botón Atrás

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(); 
    } 



} 

Respuesta

14

Su diálogo está llegando dos veces porque está consumiendo dos eventos de tecla de retroceso es decir, presionar y soltar teclas arriba .. restringir que cualquiera de ellos ..

   if (event.getAction() != KeyEvent.ACTION_DOWN) 
{ 

     /* Now call onBackPressed method here */ 
} 
+2

Gracias Deepak. Este método también funciona bien. – akhil2003in

1

onBackPressed() es una actividad standart método

Lo que está haciendo, está llamando a este método desde onKeyDown manualmente, y luego volviendo a llamar delegando evento aún más a través de super.onKeyDown (código clave, evento) (que registra, que presiona hacia atrás y llama aBackPressed() automáticamente);

Si desea trabajar con el evento de presionar la tecla presionada, puede eliminar el método onKeyDown de manera entérica y usar solo enBackPressed(), o cambiar el nombre de onBackPressed() para que sea único.

+0

Gracias Alex, eliminé el método onKeyDown. Ahora funciona bien. – akhil2003in

Cuestiones relacionadas