現在、「Androidアプリの開発」Udacityコースを受講しています。 「レッスン3:新しいアクティビティとインテント> SharedPreferencesの使用」セグメントで、インストラクターは、Android開発者サイトを調べて、SharedPreferences
からユーザー設定を取得する方法を尋ねました。ただし、公式ドキュメントとコースのソリューションでは異なることがわかりました。
Udacityコースの solution によると、SharedPreferences
のPreferenceActivity
インスタンスを取得するには、次のように呼び出す必要があります。
_SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
_
(ここで、getActivity()
はContext
内で呼び出されるため、ここでは単にFragment
です。)
Android開発者サイトの 公式ドキュメント は、次のように呼び出す必要があることを示しています。
_SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
_
では、PreferenceManager.getDefaultSharedPreferences(Context context)
とActivity.getPreferences(int mode)
の違いは何ですか?
注意:この質問には、ファイル名を必要とするgetSharedPreferences()
については何も含まれていません。 getPreferences()
とgetDefaultSharedPreferences()
の違いについてです。
前もって感謝します。
Androidドキュメントに提供したリンクによると
getSharedPreferences()-最初のパラメーターで指定する名前で識別される複数の設定ファイルが必要な場合に使用します。
getPreferences()-アクティビティに設定ファイルが1つだけ必要な場合に使用します。これがアクティビティの唯一の設定ファイルになるため、名前を指定しません。
そのため、保存/取得するデータをアプリのさまざまなアクティビティから使用できる場合は、getSharedPreferencesを使用します。これらの設定が1つのアクティビティでのみ使用される場合は、getPreferencesを使用できます。
編集:リンクした投稿で述べたように、「getDefaultSharedPreferencesは「com.example.something_preferences」のようなデフォルト名を使用しますが、getSharedPreferencesには名前が必要になることにも注意してください」
主な違いの1つ:getPreferences()は、開かれたアクティビティにのみ関連するファイルを返します。 getDefaultSharedPreferences()は、アプリケーションのグローバル設定を返します。昨日それを難しい方法で学んだ。
PreferenceManagerの内部を見ると:
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
/**
* Returns the name used for storing default shared preferences.
*
* @see #getDefaultSharedPreferences(Context)
* @see Context#getSharedPreferencesPath(String)
*/
public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
そのため、getDefaultSharedPreferences()は、アプリパッケージ名とプライベートモードでgetSharedPreferences()メソッドを使用します。アクティビティからgetPreferences()を使用すると、同じgetSharedPreferences()メソッドを使用しますが、getLocalClassName();を使用します。
以下にリンクされている最初の記事から: "注:SharedPreferences APIは、キーと値のペアの読み取りと書き込み専用であり、ユーザーインターフェイスの構築に役立つPreferenceAPIと混同しないでください。アプリの設定用(ただし、アプリの設定を保存するための実装としてSharedPreferencesを使用します)。 "
http://developer.Android.com/training/basics/data-storage/shared-preferences.html