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 - это только визуальная справка для пользователя