Предположим, что у меня есть приложение, которое сохраняет предпочтения на два файла: preferences1.xml и preferences2.xml. Затем я могу получить ссылки на соответствующие объекты со следующим кодом:
SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
Таким образом, я могу манипулировать настройками для обоих и регистрировать прослушиватели для изменений на обоих.
У меня есть некоторые сомнения относительно инициализации этих двух файлов с помощью setDefaultValues:
Вопрос 1 - Контекст предпочтения. Я создал 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, я просто хочу инициализировать эти два файла... любую помощь? Надеюсь, у меня есть четкий вопрос, даже если он слишком длинный.