Как сохранить переменную между всеми фрагментами

Мой вопрос в том, что у меня есть фрагмент, где у меня есть меню, и я выбираю параметр, который необходимо применить к каждому фрагменту, который у меня есть.

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

У меня вопрос, лучше ли это сделать с помощью синглтона? поэтому я делаю экземпляр выбора в моем профиле, а затем обращаюсь к нему в других фрагментах.

Это хороший подход или мне нужно сделать это по-другому?

Лучше всего сохранить значение в Bundle и восстановить его, если Activity является первым действием, которое открывается и saveInstanceState! = Null, и поместить его в MutableLiveData, который наблюдается с владельцем жизненного цикла представления фрагмента.

EpicPandaForce 18.12.2018 18:34

Я думаю, что SharedPreferences - лучший способ сохранить эти данные, чтобы их можно было получить из любого фрагмента или действия.

Show Young Soyinka 18.12.2018 18:38

У вас есть несколько вариантов. Некоторые из них: (1) хранить его в памяти как синглтон, (2) хранить его в Activity, содержащем все ваши Fragment (при условии, что они совместно используют Activity), (3) использовать вариант постоянного хранения (SharedPreferences, файл, SQLiteDatabase )

PPartisan 18.12.2018 18:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
644
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Обычно вы хотите сохранить такую ​​информацию о пользователе, как команду, имя, возраст и т. д.

Как вы сохраняете данные, которые позже можно будет извлечь и повторно использовать в любой другой бизнес-логике или представлениях, не имеет значения. (Может быть, например, удаленная или локальная база данных)

Я бы не рекомендовал сохранять его для любого типа жизненного цикла, зависящего от методов Android, поскольку вы можете потерять данные при завершении работы приложения.

Попробуйте сохранить данные через какой-то уровень сохраняемости. Имхо, способ доступа к этому уровню сохраняемости может быть достигнут с помощью доступа к этому уровню с помощью одноэлементного объекта.

Я добавлю вам различные ресурсы, чтобы узнать, какие из них лучше всего подходят для ваших нужд:

https://developer.android.com/guide/topics/data/data-storage
https://developer.android.com/topic/libraries/architecture/room
https://github.com/futurice/android-best-practices#data-storage
https://github.com/codepath/android_guides/wiki#persistence

Также проверьте архитектуру Android, где вы можете узнать, как они обрабатывают данные по различным фрагментам и представлениям:

https://github.com/googlesamples/android-architecture

Вам нужно создать класс и хранить статическую переменную.

Например

public class S{
 public static int sSocketTimeOutInMS = 50000;
}

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

int SocketTimeOut = S.sSocketTimeOutInMS;

Которая не переживет процесс смерти =)

Robin Vinzenz 18.12.2018 18:50

как говорит Робин, я не хочу, чтобы пользователи выбирали команду каждый раз, когда они входят в приложение, я использую общие настройки

Todd 18.12.2018 18:53

Лучший подход, который я знаю для современного приложения, - это использовать ViewModel из компонентов архитектуры Google. Вы можете совместно использовать ViewModel для всех фрагментов и наблюдать за изменениями каждого отдельного фрагмента с помощью LiveData, как кто-то сказал вам раньше.

Ответ принят как подходящий

С этим лучше справиться с помощью shared preferences. Когда вы выбираете United States, просто сохраните его для переменной в общих предпочтениях, которая будет доступна во всем приложении.

 Button updateTeamName = findViewById(R.id.btnupdateTeamName);
 updateTeamName.setOnClickListener(new View.OnClickListener() {
 @Override
    public void onClick(View v) {
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("team", "United States");
        editor.commit();
    }
 });

Когда нажимается кнопка updateTeamName, она помещает запись в общие настройки, которая будет доступна во всем приложении.

Другие вопросы по теме