Android-Einstellungen: Wie wird die Standardwerte geladen, wenn der Benutzer den Einstellungsbildschirm nicht benutzt hat?

Ich benutze eine PreferenceActivity, damit der Benutzer einige Werte setzen kann. Ich füttere es die XML-Datei mit den definierten Einstellungen.

Ich habe alle android:defaultValue="" für sie.

  • Holen Sie sich den Akku nur einmal mit Android SDK
  • Wie bekomme ich Android System Farben?
  • Android Studio: Gradle: Fehler: kann keine Variable finden
  • Mehrzeiliges EditText mit Done-Aktionstaste
  • Benötigen Sie ein einfaches Beispiel für die Audioaufnahme
  • Foto hochladen mit HttpPost MultiPartEntityBuilder
  • Wenn ich meine Anwendung anfange, brauche ich die Vorlieben, oder wenn sie noch nicht manuell eingestellt sind, möchte ich die Standardwerte:

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); boolean value = prefs.getBoolean("key"), false); 

    Allerdings, wenn android:defaultValue="true" bekomme ich immer false . Also, es sieht aus wie die standardValues ​​in der XML gesetzt sind nicht überall verwendet, sondern bei der Initialisierung der Einstellungen-Bildschirm.

    Ich möchte die Standardwerte in der Methode getBoolean() . Also, gibt es einen Weg, um die Default-Werte mit nur definieren diese an 1 Ort?

  • Ändern des Kontaktbildes zu einem großen Foto über PHOTO_FILE_ID in Android
  • Retrofit 2 - Null-Antwort-Körper
  • Model-View-Presenter und Android Application Design
  • Button Hintergrund als transparent
  • Wie kann ich ein bestimmtes Element in der Navigationsschublade als ausgewählt erscheinen?
  • Android Studio zeigt den Dialog "nicht in der Lage, Debug-Brücke zu erstellen: nicht in der Lage, Adb-Server zu starten: nicht in der Lage, Ergebnis von 'Adb-Version'
  • 5 Solutions collect form web for “Android-Einstellungen: Wie wird die Standardwerte geladen, wenn der Benutzer den Einstellungsbildschirm nicht benutzt hat?”

    Diese frage ist mir ähnlich:

    Initialize-preferences-from-xml-in-main-activity

    Verwenden Sie einfach diesen Code in onCreate Methode:

     PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

    Es wird Ihre readAgain aus XML laden und der letzte Parameter ( readAgain ) garantiert, dass die Benutzereinstellungen nicht überschrieben werden.

    Schauen Sie in PreferenceManager.setDefaultValues in Android API für weitere Untersuchungen.

    Seien Sie sich bewusst, dass, wenn Sie verwenden
    getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)

    Um Präferenzen abzurufen, die du verwenden musst
    PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
    Die Voreinstellungen einstellen!

    Beispielsweise:
    PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);

    Ich hoffe das kann jemandem helfen.

    In der angenommenen Antwort von Pixel:

     PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

    Es wird festgestellt, dass das false bedeutet, dass die Vorgaben nicht überschrieben werden. Dies ist nicht das, was es tut, es ist nur ein Effizienz-Flag, um das Parsing zu stoppen, wenn Ihre Anwendung mehr als einen Einstiegspunkt hat. Leider ist der Test nicht per Präferenzdatei gemacht. Wenn ihr also mehr als eine Voreinstellungsdatei habt, müsst ihr true auf alle, aber die erste.

    Wenn Sie sich Sorgen um Effizienz machen, können Sie so etwas kodieren.

     final static private int SPL = 1; SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); if (sp.getInt("spl", 0) != SPL) { PreferenceManager.setDefaultValues(this, R.xml.prefs1, true); PreferenceManager.setDefaultValues(this, R.xml.prefs2, true); sp.edit().putInt("spl", SPL).apply(); } 

    Wenn du jemals mehr geteilte Vorlieben hinzufügst, setze einfach SPL auf eine Höhe.

    Zum Beispiel erweitern Sie DialogPreference Ich mache dies:

     @Override protected void onSetInitialValue(boolean restore, Object defaultValue) { super.onSetInitialValue(restore, defaultValue); if (restore) { mValue = shouldPersist() ? getPersistedString(mDefault) : mDefault; } else { mValue = mDefault; } } 

    MDefault kann sein:

    • MContext.getResources () getString (attrs.getAttributeResourceValue (androidns, "defaultValue", 100));
    • Etwas, das du in R. indiziert hast.

    Stellen Sie außerdem sicher, dass Sie die SharedPreferences noch nie benutzt haben. Um sicherzustellen, dass sie nicht geändert werden (was bedeutet, setDefaultValues ​​(dies, xml, false) hat keine Wirkung) deinstallieren Sie Ihre App und laden Sie es erneut ein, um sicherzustellen, dass keine Werte berührt werden. Das hat mir geholfen

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.