defaultValue из файла настроек xml не сохраняется - почему? - PullRequest
3 голосов
/ 30 мая 2011

Когда приложение запускается впервые, я хотел бы сохранить все значения по умолчанию, которые я определил в моем 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 ]

5 голосов
/ 09 августа 2012

В зависимости от того, что является суперклассом вашего com.myapp.TimePreference, вам может потребоваться сохранить значение по умолчанию самостоятельно в onSetInitialValue (). EditTextPreference реализовал это, но DialogPrefercence или Preference имеет только пустую реализацию.

protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
    persistString(restoreValue ? 
        getPersistedString((String)defaultValue) : (String)defaultValue));
}
4 голосов
/ 30 мая 2011

Вы должны явно применить значения по умолчанию. Предположим, у вас есть файл preferences.xml, тогда вам нужно позвонить:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

Вы можете сделать это из своей основной деятельности или (лучше подход) из своего Application класса (в методе onCreate). Для получения дополнительной информации о более позднем подходе см. Application документация и android:name документация по атрибутам в application тег в AndroidManifest.xml

Примечание : Значения по умолчанию от preference.xml также будут применяться при первом открытии пользователем PreferenceActivity. Из-за этого PreferenceActivity должен заполнить настройки, используя preference.xml.

1 голос
/ 05 июня 2011

Я нашел решение своей проблемы, но оно все еще не отвечает на мой вопрос. Мне пришлось изменить строку:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

в

PreferenceManager.setDefaultValues(this, R.xml.preferences, true);

Как сказано в документации, установка readAgain не должна перезаписывать любые существующие значения предпочтений:

"Примечание: это НЕ сбрасывает настройки вернуться к значениям по умолчанию. "

Простое использование «true» работает для меня, но я до сих пор не знаю, почему при использовании «false» установлены только значения по умолчанию для трех моих предпочтений, даже если xml-файл, содержащий KEY_HAS_SET_DEFAULT_VALUES, не существовал (и поэтому не было установлено в true) на устройстве (оно существовало только до тех пор, пока я не вызвал описанный выше метод).

Если кто-нибудь знает возможную причину такого поведения, пожалуйста, дайте мне знать!

0 голосов
/ 20 апреля 2012

У меня точно такая же проблема с простыми целыми значениями по умолчанию.Ни true, ни false в setDefaultValues ​​() не могут заполнить некоторые из новых предпочтений их значениями по умолчанию, даже после открытия действия предпочтений.Я добавил их недавно в XML-файл.Они начинают работать только после процедур editor.Edit ().Кстати, я строю для 2.1.

...