Ich verwende eine DialogFragment, um einen DatePickerDialog in onCreateDialog () zurückzugeben. Ich habe den dateSetListener als DialogFragment gesetzt ("this" im Beispiel unten) und alles funktioniert, außer dass onDateSet () aufgerufen wird, wenn eine Bildschirmdrehung auftritt, was unerwünscht ist. Wie kann ich onDateSet aufrufen, wenn der Bildschirm gedreht wird?
Mein DialogFragment
%Vor%Und so nenne ich es
%Vor% Überprüfen Sie in der onDateSet
-Methode, ob Activity
aufgrund der Konfigurationsänderung neu gestartet wird, indem Sie Aktivität :: isChangingConfigurations . Wenn ja, dann zeige das Toast
nicht an.
Ich habe es getestet und funktioniert perfekt. Lassen Sie mich wissen, ob weitere Hilfe erforderlich ist.
Sie könnten versuchen, ein Flag in den angehängten / gelöschten Callbacks des Dialogs zu verwenden. Die Idee ist, eine Auslösung des Zuhörers abzubrechen, während der Dialog noch nicht an das Fenster angehängt ist (so kann die Änderung nicht vom Benutzer kommen), wie eine Wiederherstellung (was meiner Meinung nach der Grund dafür ist, dass der Zuhörer erneut angerufen wird) ):
%Vor%und verwenden Sie das Flag im Listener (weil der Listener nur im Konstruktor initialisiert wird):
%Vor% Der Weg DatePickerDialog
ist so implementiert, dass er die DataSet
Änderung in onStop
benachrichtigt, wenn OnDateSetListener
registriert ist.
Sie können auch onDateSet
aufrufen, wenn die Zurück-Taste gedrückt wird, wenn DatePickerDialog
angezeigt wird (nicht nur die Ausrichtung)
Grund: Wenn Sie die Instanz DatePickerDialog
erstellt haben, haben Sie den Callback-Listener registriert.
Der beste Weg ist also, ein custom Dialog
zu erstellen, das DatePickerDialog
erweitert und das onStop
Benutzerdefinierter DatePickerDialog
%Vor% Ändern Sie schließlich CreateDialog
in
Das sollte perfekt funktionieren. Lassen Sie es mich wissen, wenn Sie irgendein Problem sehen.
Wenn der Bildschirm gedreht wird, wird die Aktivität zerstört und neu erstellt, wodurch jedes Mal ein neues Fragment erstellt wird. Eine Möglichkeit, dieses Problem zu vermeiden, besteht darin, die Platzierung der Anweisung if (getActivity ()! = Null) in Ihrem Code zu ändern. Platzieren Sie es an einem Ort, der nicht von der Aktivität Erholung betroffen ist (nicht in der OnCreate-Methode).
Tags und Links android android-fragments android-lifecycle