2013-07-09 13 views

risposta

47

è possibile utilizzare un onDismissListener

http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html

public Dialog createDialog() { 
    Dialog d = new Dialog(this); 
    d.setOnDismissListener(new OnDismissListener() { 
     @Override 
     public void onDismiss(final DialogInterface arg0) { 
      // do something 
     } 
    }); 
    return d; 
} 

Se si utilizza un solo DialogFragment ignorare onDismiss()

http://developer.android.com/reference/android/app/DialogFragment.html#onDismiss(android.content.DialogInterface)

+0

Grazie molto! –

+0

Fantastico, ma non si ottiene il caso in cui il dispositivo viene ruotato - che uccide il dialogo. Qualche idea? – Fattie

+3

@JoeBlow Quando il dispositivo viene ruotato e viene ricreata l'attività 'onCreate' verrà chiamato e' Bundle savedInstanceState' non sarà uguale a 'null'. È possibile memorizzare qualsiasi stato (ad esempio, un valore booleano che indica se la finestra di dialogo è stata visualizzata prima della rotazione del dispositivo) in 'onsaveInstanceState' e fare riferimento qui. –

1

@Ken Wolf ha un'ottima risposta a questa domanda.

Volevo solo aggiungere che onDismissListener è stato introdotto solo in API 17. Se si sta tentando di supportare qualcosa di inferiore, è possibile utilizzare onCancelListener, che non è buono ma copre casi come backButton e toccando al di fuori di AlertDialog.

http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html#onCancel(android.content.DialogInterface)

public Dialog createDialog() { 
    Dialog d = new Dialog(this); 
    d.setOnCancelListener(new DialogInterface.OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      // do something 
     } 
    }); 
}