Android sharedPreferences устанавливает проблему значений по умолчанию
Я использую некоторые действия в своем проекте. Один из них расширен от PreferenceActivity. У меня есть CheckBoxPreference и EditTextPreference, я могу получить значения из всех других действий, используя:
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
pref = sharedPrefs.getString("edit_text_pref", "error");
но когда я открываю свое приложение, значения должны быть установлены по умолчанию, поэтому я использую:
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
в моей основной деятельности. Все должно быть в порядке, но если я пытаюсь получить предпочтение, прежде чем устанавливать его из меню настроек, я получаю "ошибку", а не значение по умолчанию, которое я установил в файле настроек xml. Если я прокомментирую getDefaultSharedPreferences
линия работает нормально, но, очевидно, когда я открываю приложение, я получаю старые настройки. Как я могу обойти эту проблему?
3 ответа
Вы получаете само значение по умолчанию, то есть "ошибка", потому что в Preferences, когда вы получаете значение какого-либо предпочтения, вам нужно указать значение, которое должно быть возвращено, если предпочтение не было установлено ранее. В вашем случае, так как вы устанавливаете значение по умолчанию "ошибка" здесь pref = sharedPrefs.getString("edit_text_pref", "error");
так вот что вы получите в качестве значения по умолчанию.
Загляните в http://developer.android.com/reference/android/preference/PreferenceManager.html
Вы должны использовать это setDefaultValues (Context context, int resId, boolean readAgain)
что-то вроде
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Внимательно посмотрите на раздел заметок в параметрах. Это зачатие читать снова Параметры
context
Контекст общих настроек.
resId
Идентификатор ресурса предпочтительного XML-файла.
readAgain Перечитывать ли значения по умолчанию. Если false, этот метод устанавливает значения по умолчанию, только если этот метод никогда не вызывался в прошлом (или если KEY_HAS_SET_DEFAULT_VALUES
в значении по умолчанию файл общих настроек имеет значение false). Чтобы снова попытаться установить значения по умолчанию, минуя эту проверку, установите для readAgain значение true.
Примечание: это НЕ сбрасывает настройки обратно к значениям по умолчанию. Для этой функциональности используйте getDefaultSharedPreferences(Context)
и очистите его, а затем вызовите этот метод с этим параметром, установленным в true
Так что я думаю, что после очистки вам нужно установить его по умолчанию, передавая readAgain как true
что-то вроде
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
PreferenceManager.setDefaultValues(this, R.xml.preference, true);
Хорошо, я подумал, что "ошибка" - это значение, использованное, если произошла ошибка при чтении значения, а не если значение не было установлено!!
Спасибо, это должно быть работа, я собираюсь попробовать