Android SharedPreferences в фрагменте
Я пытаюсь прочитать SharedPreferences внутри фрагмента. Мой код-это то, что я использую для получения предпочтений в любой другой деятельности.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Я получаю ошибку
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
Я попытался перейти по этим ссылкам, но без успеха получить доступ к SharedPreferences через статические методы и
Статические SharedPreferences. Спасибо за любое решение.
6 ответов:
метод
getSharedPreferencesметодContextобъект, так что просто вызов getSharedPreferences изFragmentне будет работать...потому что это не Контекст! (Activity-это расширение контекста, поэтому мы можем вызвать getSharedPreferences из него).таким образом, Вы должны получить контекст приложения по
// this = your fragment SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
отмеченный ответ не работал для меня, я должен был использовать
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());EDIT:
или просто попробуйте удалить
this:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
в качестве предостережения этот ответ, предоставленный пользователем выше меня, является правильным.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);однако, если вы попытаетесь получить что-либо во фрагменте до того, как onAttach будет вызван getActivity() вернет null.
можно сделать
SharedPrefencesinonAttachметод такой фрагмент:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
Это сделал трюк для меня
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());проверьте здесь https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
getActivity()иonAttach()не помог мне в той же ситуации
может быть, я сделал что-то не так
но! Я нашел другое решение
Я создал полеContext thisContextвнутри моего фрагмента
И получил текущий контекст из метода onCreateView
и теперь я могу работать с общим pref из фрагментаpublic View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
Comments