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.

  • Android: Crash nach Image Crop, wenn aktualisiert OS Version auf 5.1.1
  • Verschieben von Icons auf einem Android MapView
  • Android - Fragment-API für API-Ebene <11
  • Android - Aktivität vs. ListActivity - Welches soll meine Aktivitätsklasse erweitern?
  • Android 6: App verwendet mehr Speicher jedes Mal, wenn es gestartet wird
  • Wie kann ich eine androide c ++ - Datei drucken?
  • 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?

  • Wie man einen ausgehenden Anruf Ring in Android mit Visualizer-Klasse zu erkennen?
  • Fehlerbehandlung bei synchronem Aufruf durch Retrofit
  • Eigener ContentProvider mit SQLite und mehreren Tabellen
  • Ist es möglich, eine Zeichnung in der XML-Beschreibung zu drehen?
  • Android EditText: Done statt Enter oder Word Wrap statt Multi Line
  • Holen Sie sich die Google-ID zum Herunterladen der Anwendung
  • 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.