Подтвердить что ты не робот

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. Спасибо за любое решение.

4b9b3361

Ответ 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);
}

Ответ 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)...