SharedPreferences из нескольких файлов

1

У меня есть 2 файла для SharedPreferences (один отображается в PreferenceActivity, а второй сохраняет значения, которые не должны быть видны в PreferenceActivity). Проблема. Я хочу загрузить эти значения из обоих файлов при запуске.

  • Я попробовал getSharedPreferences() и передал имя файла. Странно, я не могу прочитать реальные значения - он всегда возвращает значения по умолчанию.

  • Если я использую addPreferencesFromResource() и передаю идентификатор файла ресурса, он считывает значения, но я не могу использовать этот подход, потому что мой Activity должен подклассом PreferenceActivity, который я не хочу делать.

Как я могу читать значения из нескольких файлов предпочтений? Что должно быть передано в getSharedPreferences() в качестве первого аргумента (имя файла с расширением, имя файла без расширения и т.д.)?

Существует метод PreferenceManager.getDefaultSharedPreferences(). Что такое "default", когда у меня есть более одного файла?

Так просто сделать задачу, так много времени потрачено впустую...

Теги:
sharedpreferences

1 ответ

2

Короткий ответ: похоже, вы вызываете PreferenceManager.getGlobalPreferences в какой-то момент, который загружает файл настроек по умолчанию, а не ваши "именованные" предпочтения. Если вы смешиваете это и context.getSharedPreferences("PREFS_NAME", Context.MODE_WORLD_READABLE), вы получите странное поведение.

Длинный ответ: Вы должны указать имя файла настроек, который вы собираетесь читать каждый раз, когда вы его открываете:

SharedPreferences prefs = context.getSharedPreferences("PREFS_NAME", Context.MODE_WORLD_READABLE)

Это заставит приложение создать новый файл предпочтений с именем файла "PREFS_NAME.xml", если он еще не существует и начинает его использовать.

addPreferencesFromFile() - это другая функция, которая используется только для заполнения PreferenceActivity. Если вы не хотите использовать PreferenceActivity, это бесполезно для вас.

Если вы решите использовать активность предпочтений для своих настроек, используйте приведенное выше, а затем задайте предпочтения для этого экземпляра активности предпочтений с помощью

getPreferenceManager().setSharedPreferencesName("PREF_NAME);

Затем вызовите addPreferencesFromResource(). Если вы не используете PreferenceActivity, то addPreferencesFromResource() ничего не сделает для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню