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 с помощью статических методов и
Static SharedPreferences. Спасибо за любое решение.
Ответы
Ответ 1
Метод getSharedPreferences
- это метод объекта Context
, поэтому просто вызов getSharedPreferences из Fragment
не будет работать... потому что это не Контекст! (Активность - это расширение Контекста, поэтому мы можем вызвать getSharedPreferences из него).
Итак, вы должны получить свои приложения Контекст
// this = your fragment
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
Ответ 2
Отмеченный ответ не работает для меня, я должен был использовать
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
РЕДАКТИРОВАТЬ:
Или просто попробуйте удалить this
:
SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
Ответ 3
В качестве предостережения этот ответ, предоставленный пользователем выше меня, является правильным.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
Однако, если вы попытаетесь получить что-либо в фрагменте до того, как onAttach будет вызван getActivity(), он вернет null.
Ответ 4
Вы можете сделать SharedPrefences
в методе onAttach
фрагмента следующим образом:
@Override
public void onAttach(Context context) {
super.onAttach(context);
SharedPreferences preferences = context.getSharedPreferences("pref", 0);
}
Ответ 5
Это помогло мне
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
Проверьте здесь https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
Ответ 6
getActivity()
и onAttach()
не помогли мне в той же ситуации
может я что то не так сделал
но! Я нашел другое решение
Я создал поле Context thisContext
внутри моего фрагмента
И получил текущий контекст из метода onCreateView
и теперь я могу работать с общим преф от фрагмента
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
thisContext = container.getContext();
...
}
Ответ 7
Чтобы определить предпочтение во Fragment: SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();
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)...
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...