Как сохранить переменную живой между всеми фрагментами - PullRequest
0 голосов
/ 18 декабря 2018

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

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

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

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

Ответы [ 4 ]

0 голосов
/ 19 декабря 2018

Это может быть лучше обработано с помощью 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 запись будет добавлена ​​в общий доступ., который будет доступен во всем приложении.

0 голосов
/ 18 декабря 2018

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

Например:

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

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

int SocketTimeOut = S.sSocketTimeOutInMS;

0 голосов
/ 19 декабря 2018

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

0 голосов
/ 18 декабря 2018

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

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

Я бы не рекомендовал сохранять ее для любых методов 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...