SharedPrefernces на несколько активити

181
07 июня 2018, 09:20

Использую 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");
Answer 1
  • используете getPreferences(int mode), если работаете с данными для текущего Activity и не хотите выдумывать имя файла.

  • используете getSharedPreferences(String name, int mode), если сохраняете, например, данные - общие для нескольких Activity и сами выбираете имя файла для сохранения.

источник

Answer 2
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. Все есть в сети, оттуда и пример.

Answer 3

Я уже когда то отвечал на этот вопрос , скопирую ответ сюда. Не п найте строго. Сижу с телефона не знаю как отправить ссылку

Ели в приложении есть 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");
READ ALSO
ClickListener при работе со списком из курсора

ClickListener при работе со списком из курсора

Система следующаяЗагружаются данные из курсора в ресайклер

203
В чём смысл создания массива на 0 элементов

В чём смысл создания массива на 0 элементов

С какой целью такая возможность поддерживается компилятором?

155
ViewPager android

ViewPager android

есть ViewPager с картинкамиМожно ли как то сделать так чтобы он как ViewFlipper (Слайдер) по указоному интервалу времени переходил на следующию картинку

111
RecyclerView вывод данных по условию

RecyclerView вывод данных по условию

Имею адаптер RecyclerView в который передаю ArrayList<MyList>ArrayList<MyList> myList;

156