独自のPreferenceFragmentサブクラス(詳細 ここ )を実装し、その中の設定の変更をリッスンしたいと思います。 PreferenceFragmentは、これを行う2つの方法を提供します。
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
そして
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
どちらを使用する必要がありますか?違いは何ですか? Android docs での区別)がよくわかりません。
主な違いは名前にあります。PreferenceManger
は、現在の設定値のマップの取得やユーザー設定の設定など、SharedPreferences
を管理するためのさまざまな機能へのアクセスを開発者に許可します。デフォルト値に。 PreferenceScreen
は、ユーザーが値を割り当てることができるように、ユーザー設定の画面の表示を処理します。これは、PreferenceScreen
sがネストされている場合のように、他の設定で画面にリストアイテムを表示し、クリックするとより多くの設定で別の画面を開くことを意味する場合があります。
あなたの質問は、PreferenceManager.getSharedPreferences()
とPreferenceScreen.getSharedPreferences()
の機能に違いがあると思うことを意味しますが、ソースコードによると、それらは同じです。
PreferenceScreen
:
_public SharedPreferences getSharedPreferences() {
if (mPreferenceManager == null) {
return null;
}
return mPreferenceManager.getSharedPreferences();
}
_
したがって、PreferenceManger
とPreferenceScreen
は異なるエンティティですが、SharedPreference
はPreferenceScreen
からメソッドを呼び出すため、これらのメソッドが返すPreferenceManager
は同じオブジェクトである必要があります。それがあなたが求めていた答えであることを願っています。
選択肢がある場合は、PreferenceManager.getSharedPreferences()
を使用してください。これはより明白で、内部でのメソッド呼び出しが1つ少なくなります。
楽しい事実:
PreferenceFragment
:
_public PreferenceManager getPreferenceManager() {
return mPreferenceManager;
}
public PreferenceScreen getPreferenceScreen() {
return mPreferenceManager.getPreferenceScreen();
}
_
最初のものは、PreferenceManager
から共有設定を取得します。 2つ目はPreferenceScreen
からのもので、Preference
クラスからこのメソッドを継承します。
どちらもおそらくSharedPreferences
オブジェクトの同じインスタンスを返すため、これは機能的な違いではないと思いますが、最初のインスタンスを使用する方が明確だと思います(PreferenceManager
の代わりにPreferenceScreen
を使用)。
PreferenceScreen寄付を参照 ここ
PreferenceScreenクラスは、次の2つの場所に表示されます。
PreferenceManagerドキュメントを参照 ここ :
差異:
getPreferenceManager ()
は、フラグメントに関連付けられている現在の設定マネージャーを返します。
getPreferenceScreen ()
はルートPreferenceScreen
を返します。つまり、設定xmlファイル(preferences.xml)からのフラグメントで使用されるルート設定画面です。