プリファレンスをpreferences1.xmlとpreferences2.xmlの2つのファイルに保存するアプリケーションがあるとします。次に、次のコードを使用して、対応するオブジェクトへの参照を取得できます。
SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
このようにして、両方の設定を操作し、両方の変更についてリスナーを登録できます。
setDefaultValuesを使用したこれら2つのファイルの初期化について疑問があります。
質問1-PreferenceFragmentコンテキスト:2つのPreferenceFragmentsを使用してPreferenceActivityを作成し、それぞれのonCreateメソッド内で次のコードを実行します(フラグメント1と2のXを1と2に置き換えます)。
PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesName("preferencesX");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false);
両方のフラグメントが起動時にデフォルト値で設定を正しく設定していることを確認しました。ただし、アプリのshared_prefsディレクトリにある_has_set_default_values.xmlファイルは1つしか表示されないため、 Preferences1.xmlとpreferences2.xmlはすでに設定されていますか?このファイルは、最初に開いたPreferenceFragmentでsetDefaultValuesが呼び出されるとすぐに作成されますが、その後でも、2番目のPreferenceFragmentを開くと、デフォルト値が正しく初期化されます。まだpreferences2.xmlが初期化されていないことをどのように理解し、その目的は何ですか_has_set_default_values.xmlには、初期化された優先ファイルに関する情報が含まれていないという事実がありますか?
質問2-標準アクティビティコンテキスト:アプリを起動したとき、PreferenceActivityは最初に開始されたアクティビティではなく、ユーザーがそれを開くことはない可能性があるため、メインのアクティビティでも2つの設定ファイルをデフォルト値で初期化します。どうやってやるの?デフォルトの共有設定の場合、それは簡単です。
PreferenceManager.setDefaultValues(this, R.xml.default_preferences, false);
2つの設定ファイルの場合、どうすればよいですか?PreferenceFragmentクラスのようにPreferenceManagerのインスタンスを取得できないため、次のようなことはできません。
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に含まれていないため、これら2つのファイルを初期化するだけです...何か助けはありますか?長すぎても、明確な質問を投稿したと思います。