Jak uzyskać domyślną wartość preferencji Androida zdefiniowanej w XML? Nie chcę powtarzać definicji wartości domyślnej zarówno w kodzie, jak i w preferencjach XML.Wartość domyślna preferencji Androida
Odpowiedz
Można określić wartość domyślną w zasobach (/values/bool.xml
):
<resources>
<bool name="mypreference_default">true</bool>
</resources>
użyć wartości w preferences.xml
:
<CheckBoxPreference
android:defaultValue="@bool/mypreference_default"
android:key="mypreference"
android:title="@string/mypreference_title" />
Następnie użyj w kodzie:
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context);
Boolean value = context.getResources().getBoolean(R.bool.mypreference_default);
Boolean b = p.getBoolean("mypreference", value);
Niezły sposób na zrobienie tego. Dzięki za udostępnienie! – pilcrowpipe
Dokładnie tego szukałem, dzięki. Jeszcze jedna wskazówka: Zdefiniuj zasoby spoza łańcucha strings.xml, ale w osobnym pliku (np. Constants.xml), aby uniknąć lokalizacji. – schnatterer
@schnatterer: przenoszenie ciągów znaków do innego pliku nie będzie powodować lokalizacji. Nazwa pliku "strings.xml" jest po prostu konwencją. Każdy zasób można zlokalizować, umieszczając go w odpowiednim podfolderze 'res /'. Chociaż umieszczenie domyślnych ustawień w osobnym pliku zasobów jest prawdopodobnie dobrym pomysłem. –
Najpierw należy zdefiniować wartości domyślne w pliku XML preferencji. Następnie można wypełnić preferencje z wartościami domyślnymi w swojej głównej działalności, wywołując:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Kiedy trzeba pobrać jakąś preferencję zadzwoń:
int value = prefs.getInt("key", null);
Ponieważ preferencje są wypełniane nie zrobisz uzyskać wartość null
.
To wciąż nie chroni przed ewentualną sytuacją, w której ktoś w dół linię usuwa preferencję z XML i zapomina zaktualizować kod Java żądający tego. W tej sytuacji aplikacja nadal będzie się kompilować, ale skończy się wyjątkiem NullPointerException. – idolize
Tak, to prawda, ale należy zapisać Test funkcjonalny, aby sprawdzić, czy wszystkie potrzebne preferencje są pobierane z XML. – pixel
to w ogóle mi nie pomogło. wartości domyślne nie zostały ustawione po wywołaniu tej metody. – moonlightcheese
Tworzenie integer.xml
pod res/values
do przechowywania stałych całkowitych.
W prefereces.xml
odniesienia "@integer/default_brightness"
W kodzie context.getResources().getInteger(R.integer.default_brightness)
wysłać plik preferencji xml, czy oznaczać PreferenceScreen – Jorgesys