Android: SharedPreference: значения по умолчанию не установлены при запуске - PullRequest
10 голосов
/ 02 мая 2010

У меня есть Listpreferences в моем приложении. Похоже, они не устанавливают свои значения по умолчанию сразу после установки - они кажутся нулевыми. Я пытаюсь выяснить, почему мои настройки по умолчанию не устанавливаются сразу после установки. В моем основном коде у меня есть:

      SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);

      InUnits = sp.getString("List1", "defValue");
       InAngs = sp.getString("List2", "defValue");
       OutUnits = sp.getString("List3", "defValue");
       OutAngs = sp.getString("List4", "defValue");

Сразу после выполнения приведенного выше кода каждая переменная содержит «defValue» вместо фактических значений, которые я присвоил в моей ListPreference ниже.

Мой предпочтительный xml-файл называется «settings.xml». Вот как выглядит одна из ListPreferences:

       <ListPreference
       android:key="List1"
       android:title="Input: Alph"
       android:summary="Choose Alph or Ralph"
       android:entries="@array/inputAlph"
       android:entryValues="@array/input_Alph_codes"
       android:dialogTitle="Input Alph"
       android:defaultValue="ININ"/>           

Вот как выглядит мой файл strings.xml:

<string-array name="inputUnits">
    <item>Alph</item>
    <item>Ralph</item>  
    </string-array>   
    <string-array name="input_Alph_codes">
    <item>ININ</item>
    <item>INMM</item>
    </string-array>

Когда я захожу в меню, а затем в настройки, я вижу, что мои значения по умолчанию проверены (радио-кнопка). Потом, когда я возвращаюсь из меню настроек на мой главный экран - все хорошо - на всю жизнь! ... тогда каждой переменной выше присваивается правильное значение по умолчанию.

Это происходит только при первой установке приложения на телефон. После того, как я один раз перехожу на экран настроек, а затем сразу же выходит из него, приложение работает нормально и принимает любые изменения настроек.

Кстати, как вы можете видеть, «List1» - это ключ android: в файле settings.xml в папке res / xml.

Ответы [ 3 ]

22 голосов
/ 02 мая 2010

Кажется, они не настроены на их значения по умолчанию сразу после установка - они кажутся нулевыми.

Вот что должно было произойти.

Я пытаюсь понять, почему мой настройки по умолчанию не устанавливаются сразу после установки.

Они не должны быть. Указанный здесь XML-код предпочтения используется только для заполнения PreferenceActivity, не более того. Пока пользователь не откроет PreferenceActivity, предпочтения будут нулевыми, и будут возвращены значения по умолчанию, которые вы указали для получателей SharedPreferences.


UPDATE

Вы можете использовать setDefaultValues() на PreferenceManager, чтобы назначить значения по умолчанию из вашего предпочтительного XML в SharedPreferences. Однако, будьте осторожны с синхронизацией - это будет делать дисковый ввод-вывод, и поэтому в идеале выполняется в фоновом потоке.

10 голосов
/ 29 декабря 2011

Установите значения по умолчанию SharedPreferences из вашего предпочтительного XML.

PreferenceManager.setDefaultValues(Context context, int resourceId, boolean readAgain)

PreferenceManager.setDefaultValues ​​

0 голосов
/ 19 мая 2011

Вы можете указать значение по умолчанию, например:

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.getString("thePrefKey", "theDefaultValue");

android: defaultValue = "..." в файле "layout" settings.xml - это только визуальная помощь для пользователя

...