

[`PreferenceFragment`](http://developer.android.com/intl/ja/reference/android/preference/PreferenceFragment.html)は設定画面を手軽に作れて便利なのですが、デフォルトの`SharedPreferences`を利用する前提となっておりアプリ内でグローバルな設定値しか編集できません。

[名前指定による任意の`SharedPreferences`](http://developer.android.com/intl/ja/reference/android/content/Context.html#getSharedPreferences%28java.lang.String,%20int%29)を、`PreferenceFragment`画面に紐付けることはできないでしょうか？もともとの目的としては、App
Widgetsインスタンス別設定画面を手軽に実装したいという要望です。


CC BY-SA 3.0
2016-05-10T10:59:43.190
24718
2016-07-08T11:01:32.070
49
question
android
PreferenceFragmentで任意のSharedPreferencesを使いたい


[getPreferenceManager()](http://developer.android.com/reference/android/preference/PreferenceFragment.html#getPreferenceManager%28%29).[setSharedPreferencesName(name)](http://developer.android.com/reference/android/preference/PreferenceManager.html#setSharedPreferencesName%28java.lang.String%29)ですかね。

## コメントに対する追記

「PreferenceFragmentが依存するgetDefaultSharedPreferences」というのは、[PreferenceManager#getDefaultSharedPreferences](http://developer.android.com/reference/android/preference/PreferenceManager.html#getDefaultSharedPreferences%28android.content.Context%29)の事でしょうか?

PreferenceManager#setSharedPreferencesNameで名前を設定したら、PreferenceManager#getDefaultSharedPreferencesを使用せず、PreferenceManager#getSharedPreferencesか、Context#getSharedPreferencesで設定した名前を指定して使用してください。

PreferenceManager#getDefaultSharedPreferencesが返すSharedPreferencesの名前は、ソースコードを見る限り、「パッケージ名+_prefereces」でハードコーディングされているので、変えられそうにないですよ。


CC BY-SA 3.0
2016-05-12T12:43:47.313
24799
2016-05-12T16:53:30.207
2016-05-12T16:53:30.207
15473
15473
24718
answer


PreferenceFragmentのonCreateで`addPreferencesFromResource(R.xml.preferences)`を呼び出す前に、`getPreferenceManager().setSharedPreferencesName(任意の名前)`とすることで、使用するSharedPreferencesの名前を指定することができます。


CC BY-SA 3.0
2016-07-08T11:01:32.070
27458
2016-07-08T11:01:32.070
9498
24718
answer