Używam PreferenceActivity, aby umożliwić użytkownikowi ustawienie niektórych wartości. Podaję mu plik xml ze zdefiniowanymi preferencjami.
Ustawiłem android:defaultValue=""
dla nich wszystko.
Kiedy uruchamiam moją aplikację, potrzebuję preferencji lub jeśli nie są one jeszcze ustawione ręcznie, chcę wartości domyślne:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
Jednak, kiedy android:defaultValue="true"
nadal dostaję false
. Tak więc wygląda na to, że domyślne wartości ustawione w XML nie są używane nigdzie, ale podczas inicjalizacji ekranu preferencji.
Nie chcę zakodować na stałe wartości domyślnych w getBoolean()
metodzie. Czy jest więc sposób na uzyskanie wartości domyślnych, definiując je tylko w jednym miejscu?
źródło
onCreate()
zApplication
.readAgain
true nie ma nic wspólnego z nadpisywaniem preferencji użytkownika. Z Javadoc: Uwaga: NIE spowoduje to zresetowania preferencji do wartości domyślnych.Pamiętaj, że jeśli używasz
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
aby odzyskać preferencje, musisz użyć do ustawienia wartości domyślnych!
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Na przykład:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
Mam nadzieję, że to może komuś pomóc.
źródło
w zaakceptowanej odpowiedzi Pixela:
stwierdza się, że
false
oznacza to, że wartości domyślne nie zostaną nadpisane. To nie jest to, co robi, jest to tylko flaga wydajności, aby zatrzymać analizowanie, jeśli aplikacja ma więcej niż jeden punkt wejścia. Niestety, test nie jest wykonywany według pliku preferencji, więc jeśli masz więcej niż jeden plik preferencji, musisz zakodowaćtrue
wszystkie z wyjątkiem pierwszego.Jeśli martwisz się o wydajność, możesz zakodować coś takiego.
Jeśli kiedykolwiek dodasz więcej wspólnych preferencji, po prostu ustaw SPL na wyższą liczbę.
źródło
R.xml.prefs_device
,R.xml.prefs_test
iR.xml.prefs_admin
. Można utworzyć jeden plik prefs który zawiera wszystkie prefs z powyższym:R.xml.prefs_for_loading_default_values
. Następnie użyj które zPreferenceManager.setDefaultValues(this, R.xml.prefs_for_loading_default_values, false);
onCreate()
podklasieApplication
(zarejestrowanej w manifeście), zostanie ona wywołana tylko raz na uruchomienie aplikacji. Dla wydajności bardziej odpowiednie byłoby (jeśli w ogóle) nie wykonywać analizy za każdym razem, gdy aplikacja jest uruchamiana (zamiast tego tylko przy pierwszym uruchomieniu) i tak właśniefalse
jest. Jest to więc bardziej kwestia tego, czy potrzebujesz sprawdzać przy każdym uruchomieniu (np. Kiedy mogą zostać dodane nowe preferencje), czy wystarczy zrobić to przy pierwszym uruchomieniu (lub zresetować preferencje).Na przykład rozszerzenie
DialogPreference
robię to:mDefault może być:
źródło
Upewnij się również, że nigdy wcześniej nie korzystałeś z SharedPreferences. Aby upewnić się, że nie zostaną zmienione (co oznacza, że setDefaultValues (this, xml, false) nie ma żadnego efektu), odinstaluj swoją aplikację i prześlij ją ponownie, aby mieć pewność, że żadne wartości nie zostaną zmienione. To mi pomogło.
źródło