Настройки Android: неверные значения по умолчанию DESPITE "setDefaultValues" - PullRequest
6 голосов
/ 28 сентября 2011

У меня похожая проблема, такая как this , поэтому я продолжил согласно предложенному решению и добавил эту строку кода в onCreate:

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

К сожалениюпроблема все еще возникает, если пользователь не изменил настройки, по-прежнему используется значение по умолчанию (true) из

mPreferences.getBoolean(String.valueOf(day_of_week), true)

вместо значения по умолчанию из XML.

Один из них предложил изменить параметр getBoolean () по умолчанию на null, но этот код вылетает из приложения:

mPreferences.getBoolean(String.valueOf(day_of_week), (Boolean) null)

Любой совет?Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 01 июня 2012

Наконец-то это работает!Я действительно потратил много времени и усилий на поиск ошибки, и как только я напишу здесь, я выясню это в одиночку ~~ спасибо, ребята, за помощь в этом.

Если когда-нибудь кто-нибудь столкнется с этой проблемой,Решение выглядит следующим образом: Измените значение по умолчанию getBoolean() с true на false, например, так:

mPreferences.getBoolean(String.valueOf(day_of_week), true) -> не работает, оно всегда верно независимо от того, что произошло в XML

mPreferences.getBoolean(String.valueOf(day_of_week), false) -> это работает!Это правильное значение по умолчанию из XML

Я действительно не понимаю логику в этом, но теперь он работает отлично.Для меня это немного похоже на ошибку.

3 голосов
/ 28 сентября 2011

Установите третий аргумент setDefaultValues в true. Так, PreferenceManager.setDefaultValues(this, R.xml.settings, true);

Из документации :

public static void setDefaultValues (Context context, int resId, boolean readAgain)
Если readAgain имеет значение false, это будет устанавливать значения по умолчанию, только если этот метод никогда не вызывался в прошлом (или KEY_HAS_SET_DEFAULT_VALUES в файле общих настроек значения по умолчанию имеет значение false). Чтобы снова попытаться установить значения по умолчанию, минуя эту проверку, установите для readAgain значение true.
Примечание: это НЕ сбрасывает настройки обратно к значениям по умолчанию.

Итак, мое понимание:

  • Если readAgain равен false, значения по умолчанию будут считываться только один раз. после первого запуска приложения. Если вы добавите новое свойство по умолчанию значение в настройках, оно не будет инициализировано, пока вы не удалите и установите приложение снова.
  • Если readAgain равно true, будет отображаться значение по умолчанию значения снова и снова при каждом вызове функции. НО, он не будет сброшен значения по умолчанию, если они уже были установлены или изменены приложение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...