Предположим, что у меня есть приложение, которое сохраняет предпочтения на два файла, preferences1.xml и preferences2.xml. Тогда я могу получить ссылки на соответствующие объекты со следующим кодом:Установка значения по умолчанию для нескольких экземпляров SharedPreferences/файлов
SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
Таким образом, я могу манипулировать предпочтения для обоих и регистрации слушателей для изменения на обоих.
У меня есть некоторые сомнения по поводу инициализации этих двух файлов, с setDefaultValues :
Вопрос 1 - контекст PreferenceFragment: Я создал PreferenceActivity с двумя PreferenceFragments и в пределах onCreate метод каждого из них Я выполняю следующий код (замените X на 1 и 2 для фрагментов 1 и 2):
PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesName("preferencesX");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false);
Я видел, что оба фрагмента правильно устанавливать свои предпочтения с их значениями по умолчанию при запуске .. но, учитывая тот факт, что я могу видеть только одну _has_set_default_values.xml файла в shared_prefs каталога приложения, как он понимает, когда свойства preferences1.xml и preferences2.xml были уже установлены? Этот файл создается, как только setDefaultValues вызывается в первом открытом PreferenceFragment, но даже после этого, если я открываю второй PreferenceFragment, он правильно инициализирует значения по умолчанию. Как он понимает, что он еще не инициализировал preferences2.xml и какова цель _has_set_default_values.xml, учитывая тот факт, что он не содержит информацию о том, какие файлы привилегий были инициализированы?
Вопрос 2 - Стандартный контекст деятельности: когда я начинаю мое приложение, то PreferenceActivity не первая деятельность началась, и пользователь никогда не может открыть его, так что я хотел бы, чтобы инициализировать два файлы настроек с их значения по умолчанию также в основном Деятельность, как я могу это сделать? Для стандартных настроек по умолчанию это просто:
PreferenceManager.setDefaultValues(this, R.xml.default_preferences, false);
Для двух файлов предпочтений, как мне сделать? Я не могу сделать что-то вроде следующего, так как я не могу получить экземпляр PreferenceManager как в классах PreferenceFragment:
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences1");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment1, false);
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences2");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment2, false);
Здесь в основной деятельности у меня нет необходимости вносить изменения в файлы настроек на котором будет работать PreferenceManager, так как мы не в PreferenceActivity, я просто хочу инициализировать эти два файла ... любую помощь? Надеюсь, у меня есть четкий вопрос, даже если он слишком длинный.
@crazymaik Я удалил свой ответ, поскольку я не думаю, что это отвечает на вопрос удовлетворительно. Я потратил несколько часов, изучая это сейчас, и это все еще полная тайна ... Надежда, что кто-то еще может пролить свет на нее. –
может у PLZ объяснить больше о SO чат? – KOTIOS
попробуйте использовать префикс .Namespace в одном физическом файле для управления двумя логическими наборами или категориями prefs в пределах одного дескриптора файла. Ваши соответствующие фрагменты должны иметь возможность применять префикс NS таким образом, который не слишком разрушителен для ваших операций CRUD в свойствах pref. –