2012-07-31 13 views
62

Fragment内のSharedPreferencesを読み込もうとしています。私のコードは、私が他のアクティビティで環境設定を取得するために使用するコードです。フラグメント内のAndroid SharedPreferences

 SharedPreferences preferences = getSharedPreferences("pref", 0); 

私はエラー

Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper  

を取得し、私はこれらのリンクをたどることを試みたが、運Accessing SharedPreferences through static methodsStatic SharedPreferencesとしています。解決していただきありがとうございます。

答えて

176

メソッドgetSharedPreferencesContextオブジェクトのメソッドなので、FragmentからgetSharedPreferencesを呼び出すだけでは動作しません。これはコンテキストではないためです。 (ActivityはContextの拡張で、getSharedPreferencesを呼び出すことができます)。

だからあなたは私の上に、ユーザが提供するこの答えが正しいか注意の注意点としては

// this = your fragment 
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
+1

getSharedPreferences( "県"、0);ゼロ(0)はどのような私的/公的な意味ですか? – Kailas

+0

@Kailasが正しい、モード、すなわちWORLD_READABLEのect。 http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String、int) – Jug6ernaut

+0

どのようなモードで共有プリファレンスを使用しましたか?そのアプリケーションによるアクセスのみ他のアプリケーションなし共有設定値を読み書きしますか? – Kailas

4

により、アプリケーションのコンテキストを取得する必要があります。あなたはONATTACH前の断片で何かを得るためにしようとした場合

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0); 

しかし、nullを返します()getActivityと呼ばれています。

それともthisを削除してみてください:

+1

ありがとうございました。また、アクティビティはonActivityCreatedが呼び出されるまで完全に初期化されていません... – hotzen

9

マークされた答えは私のために動作しませんでした、私は

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

EDIT使用していた

SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
+3

デフォルトの共有設定にアクセスしているため、マークされた回答が機能しませんでした。より良いデザインは、共有オブジェクトとしてではなく、個別のプライベート空間にプリファレンスを格納することです。ここでの質問と回答はここでのものです。 – zeeshan

0

をあなたはSharedPrefencesを作ることができますonAttachこのような断片の方法:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    SharedPreferences preferences = context.getSharedPreferences("pref", 0); 
} 
関連する問題