DatePickerDialog onDateSet wird beim Rotieren aufgerufen

8

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%     
jfortunato 19.12.2012, 18:54
quelle

6 Antworten

9

Ü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.

%Vor%

Ich habe es getestet und funktioniert perfekt. Lassen Sie mich wissen, ob weitere Hilfe erforderlich ist.

    
Manish Mulimani 24.04.2014 13:55
quelle
3

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%     
Luksprog 24.04.2014 16:08
quelle
2

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

überschreibt

Benutzerdefinierter DatePickerDialog

%Vor%

Ändern Sie schließlich CreateDialog in

%Vor%

Das sollte perfekt funktionieren. Lassen Sie es mich wissen, wenn Sie irgendein Problem sehen.

    
Libin 30.04.2014 01:06
quelle
1

Versuchen Sie, die Zeile zu ersetzen

%Vor%

von

%Vor%     
Inther 29.04.2014 18:32
quelle
0

Fügen Sie diese Eigenschaft zu Ihrer Aktivität im Manifest hinzu

%Vor%     
Sishin 30.04.2014 20:43
quelle
-1

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).

    
Rilcon42 19.12.2012 19:23
quelle