У меня возникла проблема с SharedPreferences, которая является довольно странной.Не удается получить значения из SharedPreferences, logcat ничего не показывает
У меня есть активность, которая содержит фрагмент в ViewPager. Фрагмент показывает значок и текст. Вы можете изменить значок (флажок или крест, флажок по умолчанию) и текст, отображаемый в этом фрагменте из другого действия.
Теперь я хочу сохранить текст и выбранный значок, чтобы фрагмент показывался с тем же текстом и значком, даже когда вы закрываете приложение и перезапускаете его позже.
Итак, я попытался добиться этого с помощью SharedPreferences, но когда я его попробовал, мой фрагмент не показывал мне текст, хотя у меня установлены значения по умолчанию, и значок всегда является крестом, независимо от того, что было раньше, и хотя значок по умолчанию должен быть галочкой.
Я сохраняю значения в onActivityCreated()
моего Фрагмента, когда он создан с данными, введенными пользователем в действие раньше.
Экономия:
SharedPreferences sharedPref = getActivity().getApplicationContext().getSharedPreferences("com.fragmentdata.myapp", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
//Here I am getting the values I want to save from a bundle, city and country...
editor.putString("savedCity", city);
editor.putString("savedCountry", country);
editor.putString("fragmentSaved", "yes");
editor.apply();
Тогда я получаю значение в onCreate()
моей деятельности, которая содержит фрагмент:
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("com.fragmentdata.myapp", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
//adding fragment that was created with user input
String ifAdded = sharedPref.getString("addedFragment", "no");
if(ifAdded.equalsIgnoreCase("yes")){
Bundle extras = getIntent().getExtras();
StatusFragment newFragment = new StatusFragment();
newFragment.setArguments(extras);
mSectionsPagerAdapter.addFragment(newFragment, extras.getString("city"));
editor.putString("addedFragment", "no");
editor.apply();
}
//Adding a saved fragment after restart
String storedSave = sharedPref.getString("fragmentSaved", "no");
if (storedSave.equalsIgnoreCase("yes")){
String storedCity = sharedPref.getString("savedCity", "somecity");
String storedCountry = sharedPref.getString("savedCountry", "somecountry");
Bundle saves = new Bundle();
StatusFragment savedFragment = new StatusFragment();
saves.putString("city", storedCity);
saves.putString("country", storedCity);
savedFragment.setArguments(saves);
mSectionsPagerAdapter.addFragment(savedFragment, saves.getString("city"));
}
В деятельности, где создаются данные фрагменты, у меня есть это :
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("com.fragmentdata.myapp", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("addedFragment", "yes");
editor.apply();
fragmentHolder.putExtras(bundle);
startActivity(fragmentHolder);
bundle
имеет значения типа пользователя d in и fragmentHolder
- это активность, которая содержит фрагмент.
Я искал ответы на различные вопросы здесь, на StackOverflow, но ни один из них не работает для меня, как:
Cannot get value from sharedpreferences
Shared Preferences get lost after shutting down device or killing the app
Shared Preferences reset data when app is force closed or device is restarted
SharedPreferences return only default value
SharedPreferences return only default value
Shared preference always taking default value
SharedPreferences keep getting default value
Извините, если я это, возможно, что-то тривиальное, но я не работал с фрагментами много, и я использую SharedPreferences в первый раз, в настоящее время.
Буду благодарен за каждый полезный ответ.
где вы извлекаете значение sharedpreference ??? Я не вижу никакого кода для этого –
, что должно делать это условие? 'if (getResources(). getString (R.string.pref_fragment_saved) .equals (« Да »)) {' вы знаете, что он всегда будет либо «true», либо «false» на основе значения 'R.string.pref_fragment_saved 'at'/values / strings.xml', который не может меняться во время выполнения. – Yazan
Как мы можем получить доступ к общим привилегиям, как это в вашем коде? 'SharedPreferences sharedPref = getActivity(). GetPreferences (Context.MODE_PRIVATE);' –