web-dev-qa-db-ja.com

フラグメントのAndroid SharedPreferences

Fragment内のSharedPreferencesを読み取ろうとしています。私のコードは、他のアクティビティの設定を取得するために使用するものです。

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

エラーが出る

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

私はこれらのリンクをたどろうとしましたが、運がありません 静的メソッドを介してSharedPreferencesにアクセスする および Static SharedPreferences 。解決策をありがとう。

74
Mark

メソッドgetSharedPreferencesContextオブジェクトのメソッドであるため、FragmentからgetSharedPreferencesを呼び出すだけでは機能しません...コンテキストではないためです! (アクティビティはContextの拡張であるため、そこからgetSharedPreferencesを呼び出すことができます)。

したがって、アプリケーションのコンテキストを取得する必要があります

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

マークされた答えは私のために機能しませんでした、私は使用する必要がありました

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

編集:

または、thisを削除してみてください:

SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
10
Leon

注意点として、私の上のユーザーから提供されたこの回答は正しいものです。

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

ただし、onAttachが呼び出される前にフラグメント内の何かを取得しようとすると、getActivity()はnullを返します。

7
ed209

これは私のためにトリックをしました

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());

ここを確認してください https://developer.Android.com/guide/topics/ui/settings.html#ReadingPrefs

getActivity()onAttach()は同じ状況で私を助けませんでした
たぶん何か間違ったことをした
しかし!私は別の決定を見つけました
フラグメント内にContext thisContextフィールドを作成しました
onCreateViewメソッドから現在のコンテキストを取得しました
そして、フラグメントの共有設定で作業できるようになりました

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {   
...   
thisContext = container.getContext();   
...   
}
1
Kirguduck

フラグメントのSharedPrefencesメソッドでonAttachを次のように作成できます。

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    SharedPreferences preferences = context.getSharedPreferences("pref", 0);
}
1
misbahm3

フラグメントで設定を定義するには:SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();

別のアクティビティを呼び出すか、設定データをフラグメント化するには:SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...

0
user11809346