2010-05-04 18 views
23

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

+1

wysłać plik preferencji xml, czy oznaczać PreferenceScreen – Jorgesys

Odpowiedz

61

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); 
+0

Niezły sposób na zrobienie tego. Dzięki za udostępnienie! – pilcrowpipe

+5

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

+6

@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. –

11

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.

+2

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

+0

Tak, to prawda, ale należy zapisać Test funkcjonalny, aby sprawdzić, czy wszystkie potrzebne preferencje są pobierane z XML. – pixel

+1

to w ogóle mi nie pomogło. wartości domyślne nie zostały ustawione po wywołaniu tej metody. – moonlightcheese

1

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)

Powiązane problemy