web-dev-qa-db-ja.com

PreferenceFragment-getPreferenceManager()とgetPreferenceScreen()の違いは?

独自のPreferenceFragmentサブクラス(詳細 ここ )を実装し、その中の設定の変更をリッスンしたいと思います。 PreferenceFragmentは、これを行う2つの方法を提供します。

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

そして

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

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

37

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

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

PreferenceScreen

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

     return mPreferenceManager.getSharedPreferences();
 }
_

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

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

楽しい事実:

PreferenceFragment

_public PreferenceManager getPreferenceManager() {
    return mPreferenceManager;
}

public PreferenceScreen getPreferenceScreen() {
    return mPreferenceManager.getPreferenceScreen();
}
_
18
Dandre Allison

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

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

16
JoseLSegura

PreferenceScreen寄付を参照 ここ

PreferenceScreenクラスは、次の2つの場所に表示されます。

  • PreferenceActivityがこれを指す場合、ルートとして使用され、表示されません(含まれている設定のみが表示されます)。
  • 別の設定階層内に表示されると、表示され、設定の別の画面へのゲートウェイとして機能します(設定の別の画面をダイアログとして表示するか、getIntent()からstartActivity(Android.content.Intent)を介して)。このPreferenceScreenの子は、このPreferenceScreenが表示されている画面には表示されません。代わりに、この設定がクリックされると、別の画面が表示されます。

PreferenceManagerドキュメントを参照 ここ

差異

getPreferenceManager ()は、フラグメントに関連付けられている現在の設定マネージャーを返します。

getPreferenceScreen ()はルートPreferenceScreenを返します。つまり、設定xmlファイル(preferences.xml)からのフラグメントで使用されるルート設定画面です。

13
Shruti