defaultValue из файла настроек xml не сохраняется - почему?
Когда приложение запускается впервые, я хотел бы сохранить все значения по умолчанию, которые я определил в моем prefences.xml, используя атрибут 'android:defaultValue', но некоторые из них не хранятся на устройстве - кто-то может сказать мне Зачем?
<?xml version="1.0" encoding="utf-8"?>
<PreferenceCategory android:title="@string/prefs_cat_title_x">
<ListPreference
android:key="@string/prefs_key_1"
android:title="@string/prefs_title_1"
android:summary="@string/prefs_summary_1"
android:entries="@array/array1"
android:entryValues="@array/array1"
android:defaultValue="@string/prefs_default_1"/>
<com.myapp.TimePreference
android:key="@string/prefs_key_2"
android:title="@string/prefs_title_2"
android:defaultValue="@string/prefs_default_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.myapp.TimePreference
android:key="@string/prefs_key_3"
android:title="@string/prefs_title_3"
android:defaultValue="@string/prefs_default_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ListPreference
android:key="@string/prefs_key_4"
android:title="@string/prefs_title_4"
android:summary="@string/prefs_summary_4"
android:entries="@array/array2"
android:entryValues="@array/array2"
android:defaultValue="@string/prefs_default_4"/>
<CheckBoxPreference
android:key="@string/prefs_key_5"
android:title="@string/prefs_title_5"
android:summary="@string/prefs_summary_5"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="@string/prefs_key_6"
android:title="@string/prefs_title_6"
android:summary="@string/prefs_summary_6"
android:defaultValue="false"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_cat_title_common">
<com.myapp.DatabaseResetPreference
android:title="@string/prefs_title_7"
android:summary="@string/prefs_summary_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</PreferenceCategory>
4 ответа
Я нашел решение своей проблемы, но оно все еще не отвечает на мой вопрос. Я должен был изменить строку:
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
в:
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
Как сказано в документации, установка readAgain не должна перезаписывать любые существующие значения предпочтений:
"Примечание: это НЕ сбрасывает настройки обратно к значениям по умолчанию".
Простое использование "true" работает для меня, но я до сих пор не знаю, почему при использовании "false" устанавливаются только значения по умолчанию для трех моих предпочтений, хотя xml-файл, содержащий KEY_HAS_SET_DEFAULT_VALUES, не существовал (и не был установить на true) на устройстве (оно существовало только до тех пор, пока я не вызвал метод выше).
Если кто-нибудь знает возможную причину такого поведения, пожалуйста, дайте мне знать!
В зависимости от того, что является суперклассом вашего com.myapp.TimePreference, вам может потребоваться сохранить значение по умолчанию самостоятельно в onSetInitialValue(). EditTextPreference реализовал это, но DialogPrefercence или Preference имеет только пустую реализацию.
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
persistString(restoreValue ?
getPersistedString((String)defaultValue) : (String)defaultValue));
}
Вы должны явно применять значения по умолчанию. Давайте предположим, что у вас есть preferences.xml
файл, то вам нужно позвонить:
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
Вы можете сделать это из вашей основной деятельности или (лучший подход) из вашего Application
класс (в onCreate
метод). Для получения дополнительной информации о более позднем подходе см. Application
документация и android:name
документация по атрибутам в application
отметить в AndroidManifest.xml
Примечание: значения по умолчанию от preference.xml
также будет применяться при открытии пользователя PreferenceActivity
в первый раз. Из-за этого PreferenceActivity
должен заполнить настройки с помощью preference.xml
,
У меня точно такая же проблема с простыми числами по умолчанию. Ни true, ни false в setDefaultValues () не могут заполнить некоторые из новых предпочтений их значениями по умолчанию, даже после открытия действия предпочтений. Я добавил их недавно в XML-файл. Они начинают работать только после процедур editor.Edit(). Я строю для 2.1, кстати.