Nano Hash - криптовалюты, майнинг, программирование

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>    


Ответы:


1

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

protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
    persistString(restoreValue ? 
        getPersistedString((String)defaultValue) : (String)defaultValue));
}
09.08.2012

2

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

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

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

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

29.05.2011
  • Привет, спасибо за ваш ответ! К сожалению, похоже, это не работает. :-( Я сделал полную деинсталляцию, поместил строку в действие входа в приложение и заглянул в файл sharedprefs после повторного запуска. Я все еще нахожу значения по умолчанию для каждого ListPreference, который можно найти в файле preferences.xml, но нет значения по умолчанию для CheckBoxPreference и TimePreference в файле Знаете почему? 31.05.2011
  • Вы должны добавить свой preferences.xml к вопросу. Если это слишком долго, попробуйте уменьшить его до 4-5 предпочтений. 31.05.2011
  • Я приложил код, я думаю, что это не очень интересно. Но похоже не работает :( 31.05.2011
  • Хотя в некоторых случаях это является причиной, похоже, что в этом случае проблема указана в ответе Вэя. 14.08.2015

  • 3

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

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

    в:

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

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

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

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

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

    05.06.2011
  • Кто-то, вероятно, обновил документы, потому что из документов setDefaultValues(...) сразу после Примечание: это НЕ вернет настройки к их значениям по умолчанию. можно найти следующее. Для этой функциональности используйте PreferenceManager.getDefaultSharedPreferences(Context) и очистите его, а затем вызовите этот метод с этим параметром, установленным в true. 24.08.2015

  • 4

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

    20.04.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..