Насколько я могу судить, значения не сохраняются в Android SharedPreferences
до тех пор, пока к ним не будет получен явный доступ. То есть, хотя они могут иметь значения по умолчанию в XML, никакое значение не помещается в хранилище SharedPreferences
до тех пор, пока не будет вызван метод доступа, поэтому все методы доступа имеют включенные параметры «по умолчанию».
Хотя это не так уж сложно для простого извлечения значений из хранилища настроек, это предотвращает любые попытки получить все ключи настроек, которые используются в приложении, даже если они хранятся в XML. Ключи не появляются при вызове SharedPreferences#getAll()
, если только к предпочтениям уже не был получен явный доступ.
Есть ли способ принудительно сохранить все настройки, определенные в XML, в хранилище SharedPreferences
? Ближайшее решение, которое я могу найти, - это вручную проанализировать файлы Preference XML, найти все ключи и значения по умолчанию и сохранить значение по умолчанию для каждого из них. Есть ли более чистый подход?
ОБНОВЛЕНИЕ
Посмотрев на это более подробно, я получил неполный список предпочтений по другой причине. Когда установлены значения по умолчанию, сохраняются только значения EditTextPreference
и ListPreference
. Два других, пользовательское предпочтение и CheckBoxPreference
, полностью игнорируются. Вот пример CheckBoxPreference
, который игнорируется:
<CheckBoxPreference
android:defaultValue="false"
android:key="PREF_NAME"
android:summary="Summary text"
android:title="Title" />
Любая идея, почему не все значения по умолчанию устанавливаются?