Ich hatte einige Probleme, einige benutzerdefinierte DialogPreference-Unterklassen in einem PreferenceFragment zu erhalten, um sichtbar zu bleiben, wenn der Bildschirm gedreht wird. Ich habe dieses Problem nicht, wenn ich eine PreferenceActivity verwende, daher weiß ich nicht, ob es sich um einen Android-Fehler oder ein Problem mit meinem Code handelt, aber ich möchte, dass jemand bestätigt, ob er die gleiche Erfahrung macht.Warum wird Fragment nicht beibehalten, wenn der Bildschirm gedreht wird?
Um dies zu testen, erstellen Sie zunächst ein Einstellungsfenster mit mindestens einer DialogPreference (egal welche Unterklasse). Zeigen Sie es dann in einer PreferenceActivity an. Wenn Sie Ihre App ausführen, drücken Sie auf die DialogPreference, so dass der Dialog angezeigt wird. Drehen Sie dann den Bildschirm, so dass sich die Ausrichtung ändert. Bleibt der Dialog sichtbar?
Dann versuchen Sie das gleiche, aber mit einem PreferenceFragment, um Ihre Einstellungen anstelle einer PreferenceActivity anzuzeigen. Ist der Dialog weiterhin sichtbar, wenn Sie den Bildschirm drehen?
Bisher habe ich festgestellt, dass der Dialog sichtbar bleibt, wenn eine PreferenceActivity verwendet wird, aber nicht, wenn PreferenceFragment verwendet wird. Betrachtet man die source code for DialogPreference, so scheint es, dass das korrekte Verhalten darin besteht, dass der Dialog sichtbar bleibt, weil isDialogShowing
die Statusinformation ist, die gespeichert wird, wenn onSaveInstanceState()
auf der Bildschirmumorientierung aufgerufen wird. Daher denke ich, dass ein Fehler das PreferenceFragment (und alles darin) daran hindert, diese Statusinformationen wiederherzustellen.
Wenn es sich um einen Android-Fehler handelt, hat dies weitreichende Auswirkungen, da jeder, der PreferenceFragment verwendet, Statusinformationen nicht speichern und wiederherstellen kann.
Kann jemand bitte bestätigen? Wenn es kein Fehler ist, was passiert dann?
Die dritte Option ist die Standardmethode zur Überprüfung der "ersten" onCreate Ausführung – SeanPONeil
Wie würden Sie das tun? –
if (savedInstanceState == null) {} Diese Anweisung wird nur bei der ersten Erstellung einer Aktivität auf "true" gesetzt – SeanPONeil