2011-06-01 14 views

Respuesta

50

Puede utilizar setOnCancelListener:

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() 
{ 
    @Override 
    public void onCancel(DialogInterface dialog) 
    { 
     MyActivity.this.finish(); 
    } 
}); 

que necesita para terminar su única actividad. El diálogo se cerrará automáticamente.

+2

+1 para mí apuntando en la dirección correcta, el efecto que estaba buscando es la onDismissListener pero lo suficientemente cerca :-) – Skizit

+0

onDismissListener sobrescribir los botones positivos y negativos también. Por lo tanto, si está buscando sobrescribir y presionar presionando cualquier lugar fuera del diálogo, onCancelListener es mejor. – thinzar00

22
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { 
        @Override 
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
         if (keyCode == KeyEvent.KEYCODE_BACK) { 
           dialog.cancel(); 
           return true; 
          } 
         return false; 
        } 
       }) 
2
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState){ 
    return new Dialog(getActivity(), getTheme()){ 
    @Override 
    public void onBackPressed(){ 
     // dismiss(); 
     // activityReference.finish(); 
    } 
    }; 
} 
0

en mi caso yo uso DialogFragment, que sigue siendo un diálogo .. así que overriden onCancel() en mi diálogo, y reacciona como onBackPressed() de la Actividad cada vez que haga clic en el botón de retroceso cuando es de diálogo mostrado.

@Override 
public void onCancel(DialogInterface dialog) 
{ 
    super.onCancel(dialog); 
    Log.i("RecDialog.onCancel()", "onCancel"); 
} 

Espero que haya ayudado.

0

Finalmente agregué un oyente clave a mi diálogo para escuchar la tecla Atrás. No es tan elegante como anular onBackPressed() pero funciona. Aquí está el código:

dlgDetails = new AlertDialog.Builder(this) 
    .setOnKeyListener(new DialogInterface.OnKeyListener() { 
     @Override 
     public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK && 
       event.getAction() == KeyEvent.ACTION_UP && 
       !event.isCanceled()) { 
       dialog.cancel(); 
       showDialog(DIALOG_MENU); 
       return true; 
      } 
      return false; 
     } 
    }) 
    //(Rest of the .stuff ...) 
Cuestiones relacionadas