37

私は独自の PreferenceFragment サブクラス (詳細はこちら) を実装しており、その中の設定の変更をリッスンしたいと考えています。PreferenceFragment には、これを行う 2 つの方法があります。

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

どちらを使用する必要がありますか? 違いは何ですか?Android docs で行われた区別がよくわかりません。

4

3 に答える 3

18

主な違いは名前にあり、現在の設定値のマップの取得やユーザー設定の設定など、PreferenceManger管理のために開発者にさまざまな機能へのアクセスを許可します。SharedPreferencesデフォルト値に。PreferenceScreenユーザー設定の画面の表示を処理して、ユーザーがそれらに値を割り当てることができるようにします。PreferenceScreenこれは、がネストされている場合のように、他の設定を含む画面にリスト項目を表示することを意味する場合があります。

PreferenceManager.getSharedPreferences()あなたの質問は、あなたが whatとdosの間に違いがあると思うことを意味しますがPreferenceScreen.getSharedPreferences()、ソースコードによれば、それらは同一です。

PreferenceScreen:

public SharedPreferences getSharedPreferences() {
     if (mPreferenceManager == null) {
         return null;
     }

     return mPreferenceManager.getSharedPreferences();
 }

したがって、PreferenceMangerPreferenceScreenは異なるエンティティですが、からメソッドを呼び出すため、SharedPreferenceこれらのメソッドの戻り値は同じオブジェクトである必要があります。それがあなたが求めていた答えであることを願っています。PreferenceScreenPreferenceManager

選択肢がある場合は、 を使用します。これはPreferenceManager.getSharedPreferences()より明白であり、内部でのメソッド呼び出しが 1 つ少なくなります。

楽しい事実:

PreferenceFragment:

public PreferenceManager getPreferenceManager() {
    return mPreferenceManager;
}

public PreferenceScreen getPreferenceScreen() {
    return mPreferenceManager.getPreferenceScreen();
}
于 2012-12-18T22:04:25.997 に答える
16

最初のものは、から共有設定を取得しPreferenceManagerます。クラスPreferenceScreenからこのメソッドを継承する、からの2番目のもの。Preference

どちらもおそらくSharedPreferencesオブジェクトの同じインスタンスを返すため、これは機能的な違いではないと思いますが、最初のインスタンスを使用する方が明確だと思います(のPreferenceManager代わりにを使用PreferenceScreen)。

于 2012-12-02T23:36:33.783 に答える