Angenommen, ich eine Anwendung, die Präferenzen auf zwei Dateien speichert, preferences1.xml und preferences2.xml. Dann kann ich Verweise auf die entsprechenden Objekte mit dem folgenden Code abrufen:Einstellung Standardwerte mehrerer SharedPreferences Instanzen/Dateien
SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
Auf diese Weise habe ich die Einstellungen für beide manipulieren können und registrieren Zuhörer für Änderungen auf beiden.
Ich habe einige Zweifel an der Initialisierung der beiden Dateien, mit setDefaultValues :
Frage 1 - PreferenceFragment Kontext: Ich habe eine PreferenceActivity erstellt mit zwei PreferenceFragments und innerhalb der onCreate Methode von jedem Ich führe den folgenden Code (ersetzen Sie X durch 1 und 2 für Fragment 1 und 2):
PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesName("preferencesX");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false);
Ich habe gesehen, dass beiden Fragmente mit ihren Standardwerten setzen ihre Präferenzen korrekt nach dem Abwurf .. aber angesichts der Tatsache, dass ich nur eine einzige _has_set_default_values.xml Datei in dem shared_prefs Verzeichnis des App sehen kann, Wie versteht es, wenn Eigenschaften von preferences1.xml und preferences2.xml bereits festgelegt wurden? Diese Datei wird erstellt, sobald setDefaultValues aufgerufen wird in der ersten geöffneten PreferenceFragment, aber auch danach, wenn ich die zweite öffnen PreferenceFragment es korrekt initialisiert Standardwerte. Wie versteht es, dass es noch nicht initialisiert wurde preferences2.xml und was ist der Zweck von _has_set_default_values.xml angesichts der Tatsache, dass es keine Informationen darüber enthält, welche Preferences Dateien initialisiert wurden?
Frage 2 - Standard Aktivität Kontext: wenn ich meine app starten, das PreferenceActivity ist nicht die erste Aktivität gestartet und der Benutzer kann es nie öffnen, so mag ich die beiden Einstellungsdateien mit ihrem initialisieren Standardwerte auch in der Haupt Aktivität, wie kann ich das tun? Für voreingestellte gemeinsame Einstellungen ist es einfach:
Für zwei Präferenzdateien wie soll ich tun? Ich kann so etwas wie die folgenden nicht tun, da ich keine Instanz PreferenceManager wie in den PreferenceFragment Klassen abrufen kann:
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences1");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment1, false);
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences2");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment2, false);
Hier im Hauptaktivität Ich habe nicht die Notwendigkeit, die Einstellungsdateien zu ändern auf dem die PreferenceManager funktioniert, da wir nicht in einer PreferenceActivity sind, möchte ich einfach diese beiden Dateien zu initialisieren ... irgendwelche Hilfe? Ich hoffe, ich habe eine klare Frage gestellt, wenn auch zu lange.
@crazymaik Ich habe meine Antwort gelöscht, wie ich es nicht denke Beantwortet die Frage zufriedenstellend. Ich habe schon einige Stunden damit verbracht, dies zu untersuchen, und es ist immer noch ein vollkommenes Mysterium ... Hoffentlich kann jemand anderes etwas Licht darauf werfen. –
können Sie mehr über SO Chat erklären? – KOTIOS
Verwenden Sie ein Präfix ".Namespace" in einer einzelnen physischen Datei, um 2 logische Gruppen oder Kategorien von Präferenzen in einem einzigen Dateihandle zu verwalten. Ihre jeweiligen Fragmente sollten in der Lage sein, das NS-Präfix in einer Weise anzuwenden, die für Ihre CRUD-Operationen in den pref-Eigenschaften nicht zu störend ist. –