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




Обычно вы хотите сохранить такую информацию о пользователе, как команду, имя, возраст и т. д.
Как вы сохраняете данные, которые позже можно будет извлечь и повторно использовать в любой другой бизнес-логике или представлениях, не имеет значения. (Может быть, например, удаленная или локальная база данных)
Я бы не рекомендовал сохранять его для любого типа жизненного цикла, зависящего от методов 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;
Которая не переживет процесс смерти =)
как говорит Робин, я не хочу, чтобы пользователи выбирали команду каждый раз, когда они входят в приложение, я использую общие настройки
Лучший подход, который я знаю для современного приложения, - это использовать 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, она помещает запись в общие настройки, которая будет доступна во всем приложении.
Лучше всего сохранить значение в Bundle и восстановить его, если Activity является первым действием, которое открывается и saveInstanceState! = Null, и поместить его в MutableLiveData, который наблюдается с владельцем жизненного цикла представления фрагмента.