Ich verwende eine PreferenceActivity, damit der Benutzer einige Werte festlegen kann. Ich füttere es die XML-Datei mit den definierten Einstellungen.
Ich habe alles android:defaultValue=""
für sie eingestellt.
Wenn ich meine Anwendung starte, benötige ich die Einstellungen, oder wenn sie noch nicht manuell festgelegt wurden, möchte ich die Standardwerte:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
Allerdings, wenn android:defaultValue="true"
ich noch bekomme false
. Es sieht also so aus, als würden die im XML festgelegten Standardwerte nur beim Initialisieren des Einstellungsbildschirms verwendet.
Ich möchte die Standardwerte in der getBoolean()
Methode nicht fest codieren . Gibt es also eine Möglichkeit, die Standardwerte zu erhalten, indem diese nur an einer Stelle definiert werden?
quelle
onCreate()
derApplication
.readAgain
auf true hat nichts mit dem Überschreiben von Benutzereinstellungen zu tun. Aus dem Javadoc: Hinweis:Beachten Sie dies, wenn Sie verwenden
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
Um Einstellungen abzurufen, müssen Sie die Standardeinstellungen festlegen!
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Beispielsweise:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
Ich hoffe das kann jemandem helfen.
quelle
in der akzeptierten Antwort von Pixel:
Es wird angegeben, dass die
false
Standardeinstellungen nicht überschrieben werden. Dies ist nicht das, was es tut, es ist nur ein Effizienz-Flag, um das Parsen zu stoppen, wenn Ihre Anwendung mehr als einen Einstiegspunkt hat. Leider wird der Test nicht pro Präferenzdatei durchgeführt. Wenn Sie also mehr als eine Präferenzdatei haben, müssen Sietrue
alle außer der ersten codieren .Wenn Sie sich Sorgen um die Effizienz machen, können Sie so etwas codieren.
Wenn Sie jemals mehr gemeinsame Einstellungen hinzufügen, setzen Sie SPL einfach auf eine hohe Zahl.
quelle
R.xml.prefs_device
,R.xml.prefs_test
undR.xml.prefs_admin
. Sie können eine Prefs-Datei erstellen, die alle Prefs aus den oben genannten enthält :R.xml.prefs_for_loading_default_values
. Verwenden Sie das dann mitPreferenceManager.setDefaultValues(this, R.xml.prefs_for_loading_default_values, false);
onCreate()
einer Unterklasse vonApplication
(im Manifest registriert) aufrufen , wird es ohnehin nur einmal pro Anwendungsstart aufgerufen. Für die Leistung wäre es relevanter (wenn überhaupt), das Parsen nicht jedes Mal durchzuführen, wenn die App gestartet wird (stattdessen nur beim ersten Start), und genau dasfalse
tut es. Es geht also eher darum, ob Sie bei jedem Start eine Überprüfung benötigen (z. B. wann neue Einstellungen hinzugefügt werden könnten) oder ob dies ausreicht, wenn dies beim ersten Start erfolgt (oder wenn die Einstellungen zurückgesetzt werden).Zum Beispiel
DialogPreference
mache ich Folgendes:mDefault kann sein:
quelle
Stellen Sie außerdem sicher, dass Sie die SharedPreferences noch nie verwendet haben. Um sicherzustellen, dass sie nicht geändert werden (was bedeutet, dass setDefaultValues (this, xml, false) keine Auswirkungen hat), deinstallieren Sie Ihre App und laden Sie sie erneut hoch, um sicherzustellen, dass keine Werte berührt werden. Das hat mir geholfen.
quelle