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 。解決策をありがとう。
メソッドgetSharedPreferences
はContext
オブジェクトのメソッドであるため、Fragment
からgetSharedPreferencesを呼び出すだけでは機能しません...コンテキストではないためです! (アクティビティはContextの拡張であるため、そこからgetSharedPreferencesを呼び出すことができます)。
したがって、アプリケーションのコンテキストを取得する必要があります
// this = your fragment
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
マークされた答えは私のために機能しませんでした、私は使用する必要がありました
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
編集:
または、this
を削除してみてください:
SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
注意点として、私の上のユーザーから提供されたこの回答は正しいものです。
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
ただし、onAttachが呼び出される前にフラグメント内の何かを取得しようとすると、getActivity()はnullを返します。
これは私のためにトリックをしました
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();
...
}
フラグメントのSharedPrefences
メソッドでonAttach
を次のように作成できます。
@Override
public void onAttach(Context context) {
super.onAttach(context);
SharedPreferences preferences = context.getSharedPreferences("pref", 0);
}
フラグメントで設定を定義するには: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)...