2013-07-09 23 views

Odpowiedz

47

można użyć 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; 
} 

Jeśli używasz DialogFragment tylko przesłonić onDismiss()

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

+0

Dziękuję bardzo! –

+0

Fantastyczne, ale nie dzieje się tak w przypadku obracania urządzenia - co zabija dialog. Jakieś pomysły? – Fattie

+3

@JoeBlow Kiedy urządzenie zostanie obrócone i zostanie odtworzona aktywność "onCreate", a 'Bundle savedInstanceState' nie będzie równe' null'. Możesz zapisać dowolny stan (na przykład boolean, czy okno dialogowe było wyświetlane przed obróceniem urządzenia) w 'onsaveInstanceState' i odnieść go tutaj. –

1

@Ken Wolf ma świetną odpowiedź na to pytanie.

Chciałam tylko dodać, że onDismissListener został wprowadzony tylko w API 17. Jeśli próbujesz wesprzeć coś mniejszego, możesz użyć onCancelListener, co nie jest tak dobre, ale obejmuje przypadki takie jak backButton i stukanie poza 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 
     } 
    }); 
}