Использую SharedPreference
для настроек приложения, есть единственное но, как сделать чтобы SharedPrefernce
можно было вызвать из любого активити?
Я имею виду, что есть у меня Settings_activity
, вот как SharedPreference
созданный в нем использовать для других активити, чтобы передавался ключ и значение, вообще как intent.putExtra
Необходимо сначала создать связку ключей:
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("key", "value");
editor.apply();
А после из другого активити вызвать:
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
String s = sharedPref.getString("key");
используете getPreferences(int mode), если работаете с данными для текущего Activity
и не хотите выдумывать имя файла.
используете getSharedPreferences(String name, int mode), если сохраняете, например, данные - общие для нескольких Activity
и сами выбираете имя файла для сохранения.
источник
public static final String APP_PREFERENCES = "mysettings";// это будет именем файла настроек
public static final String APP_PREFERENCES_NAME = "Nickname"; // имя кота
public static final String APP_PREFERENCES_AGE = "Age"; // возраст кота
SharedPreferences mSettings;
Внутри какого-то метода
mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
и работайте с этим файлом. у него имя есть, по имени он вызовется откуда угодно, в пределах приложения точно. если выберете более публичный модификатор, то и не только внутри приложения его можно будет читать. Не хотите по имени - пользуйтесь DefaultSharedPreferences. Все есть в сети, оттуда и пример.
Я уже когда то отвечал на этот вопрос , скопирую ответ сюда. Не п найте строго. Сижу с телефона не знаю как отправить ссылку
Ели в приложении есть PreferenceActivity
или фрагмент, то там устанавливается значение по умолчанию для каких то параметров, это можно сделать программно, а можно по простому через XML
. Вот , меню, например, для настройки текста в активности,
а key
это ключ по которому можно достучаться до настройки.
menu.xml:
<ListPreference
android:defaultValue="1"
android:entries="@array/entry_values"
android:entryValues="@array/entries"
android:key="@string/list_preference_1"
android:summary="%s"
android:title="Размер шрифта" />
где:
<!-- ВЫБОР ШРИФТА -->
<string-array name="entries">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="entry_values">
<item>Мелкий</item>
<item>Средний</item>
<item>Крупный</item>
</string-array>
в самом фрагменте настроек PreferenceFragment
ему можно повесить слушатель в методе onSharedPreferenceChanged
, например снэкбар для уведомления о том, что настройка изменена:
if (key.equals(getString(R.string.list_preference_1))) {
snackbar = Snackbar.make(getActivity().findViewById(android.R.id.content),"Размер шрифта изменен", Snackbar.LENGTH_LONG);
View snackBarView = snackbar.getView();
TextView textView = snackBarView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(ContextCompat.getColor(getActivity(), android.R.color.white));
snackbar.show();
}
А вот так можно вызвать настройку в активности или там где она нужна и привязать к ней нужные текстВью:
private static final int TEXT_SIZE_SMALL = 14, TEXT_SIZE_MID = 18,TEXT_SIZE_LARGE = 22 ;
private void getSetting() {
String txt_view_size = preferences.getString(getString(R.string.list_preference_1), "1");
//это значение по умолчанию
if (txt_view_size.contains("2")) {
txt_view.setTextSize(TEXT_SIZE_MID);
} else if (txt_view_size.contains("3")) {
txt_view.setTextSize(TEXT_SIZE_LARGE);
} else {
txt_view.setTextSize(TEXT_SIZE_SMALL);
}
}
так вы получите настройку по умолчанию и возможность менять её через меню настроек
Допрлню если нужно просто сохранять вызывать
Записать пару ключ-значение:
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("key", "value"); editor.commit();
Прочитать значение ключа:
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); String s = sharedPref.getString("key");
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Система следующаяЗагружаются данные из курсора в ресайклер
С какой целью такая возможность поддерживается компилятором?
есть ViewPager с картинкамиМожно ли как то сделать так чтобы он как ViewFlipper (Слайдер) по указоному интервалу времени переходил на следующию картинку
Имею адаптер RecyclerView в который передаю ArrayList<MyList>ArrayList<MyList> myList;