Aktuelles Verhalten von PreferenceFragment
: Bei der ersten Anzeige auf dem Bildschirm schreibt PreferenceFragment
in den zugeordneten SharedPreferences
alle in PreferenceScreen
definierten XML-Ressourcen. Ich habe dieses Paar mal getestet und PreferenceFragment sowie PreferenceActivity schreiben alle Voreinstellungen standardmäßig auf SharedPreferences, wenn der Benutzer die Einstellungsaktivität öffnet, auch wenn er sie sofort schließt, ohne etwas zu berühren.Verhindern, dass PreferenceFragment Standardeinstellungen in SharedPreferences schreibt
Problem: Wenn ich in der nächsten Version meiner App beschließe, einige Standardbenutzereinstellungen zu ändern, werden sie nicht auf die Geräte angewendet, bei denen der Benutzer mindestens einmal die App-Einstellungen geöffnet hat, weil PreferenceFragment
alle Standardwerte auf SharedPreferences
geschrieben hat. Ich weiß, dass ich neue Standardwerte erneut anwenden kann, indem ich alle Werte in SharedPreferences
überschreibe, nicht nur Standard, sondern auch vom Benutzer gewählt. Das Zurücksetzen der Benutzereinstellungen im App-Update ist jedoch völlig inakzeptabel. Das Problem ist also, dass wir nicht unterscheiden können, wenn eine bestimmte Präferenz explizit durch den Benutzer oder dessen Standardvorgabe festgelegt wurde, die bei der ersten Anzeige auf dem Bildschirm durch geschrieben wurde.
Was ich will: Wenn der Benutzer eine bestimmte Präferenz hat, was auch immer er gewählt hat, sollte ich dies nicht mit meinen aktualisierten App-Standards berühren, auch wenn die Benutzerauswahl mit meinem alten Standard übereinstimmt. Aber wenn Benutzer nicht explizit gewählt wurde, möchte ich, dass meine neuen Standardeinstellungen für ihn mit App-Update arbeiten.
Also: Wie zu verhindern, schreiben von Standardvoreinstellungen Werte von PreferenceFragment
zu zugeordneten SharedPreferences?
, wenn der Benutzer nichts besonders bevorzugt ändern es in der Präferenz XML-Datei nicht angezeigt, in der alle Werte – pskink
gespeichert sind @pskink ich diese paar Mal und PreferenceFragment auch getestet, wie PreferenceActivity alle Einstellungen standardmäßig SharedPreferences begehen wenn der Benutzer zum ersten Mal das Einstellungsfenster öffnet. Ich war überrascht, als es notierte – Dima
'... und PreferenceActivity commit alle Voreinstellungen Standard SharedPreferences ...' Sie meinen, die physische Datei '/data/data/your.package/ shared_prefs/your.package_preferences.xml 'wird mit aufgefüllt die Standardwerte? für einen Test-Dump diese Datei, dann fügen Sie einige neue Präferenz, dump die Datei erneut, ändern Sie diese Einstellung und dump diese Datei erneut – pskink