Android: SharedPreference: значения по умолчанию не установлены при запуске

У меня есть 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>

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

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

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

Ответ 1

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

То, что должно было случиться.

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

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


UPDATE

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

Ответ 2

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

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

PreferenceManager.setDefaultValues ​​

Ответ 3

Вы можете указать значение по умолчанию, подобное этому

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

android: defaultValue = "..." в настройках "layout".xml - это только визуальная справка для пользователя