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

645   6  

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.

можно сделать SharedPrefences in onAttach метод такой фрагмент:

@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

    Ничего не найдено.