Как сделать общую переменную для двух фрагментов?

Имеется RecyclerView в Фрагменте №1 и Фрагмент 2 с парой кнопок. Оба фрагменты внутри ViewPager. Из фрагмента №1 нажимая на кнопку я могу добавлять элементы в RecyclerView,но я хочу это делать из Фрагмента №2. То есть по нажатию кнопки во фрагменте создавать один item для Recyclerview и помещать его, при этом не переходя на фрагмент с RecyclerView. Я представляю это так, что надо сделать общий адаптер , устанавливать его во фрагменте с RecyclerView,а добавлять элементы в фрагменте без RecyclerView.Как это лучше сделать?Пока что только идея в том что бы связать их через активность,но там же проблемы будут также


Ответы (2 шт):

Автор решения: ЮрийСПб

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

Засим вот вам краткое абстрактное описание решения:

  1. Создайте синглтон для хранения списка элементов, для отображения в списке.
  2. Изменяйте список из нужного места.
  3. Уведомляйте об изменениях в списке, чтобы перерисовать экран.

А вот так можно это реализовать с библиотеками:

  1. Берём RxJava, RxAndroid, RxRelay + ToothPick
  2. Создаём класс с BehaviorRelay<List<Data>>
  3. Биндим его экземпляр как синглтон с помощью ToothPick
  4. Инжектим экземпляры класса из п2 в оба фрагмента.
  5. Список отображаем, подписавшись на изменения источника данных из п.2
  6. Когда нужно, через BehaviorRelay из п2 отправлем новый список данных.
→ Ссылка
Автор решения: Sergei Buvaka

Не должно быть никаких переменных общих между двумя разными экранами. Если вам необходимо шарить какие-то данные между разными экранами, вы можете создать сущность которая будет жить независимо от этих экранов. Она уже может хранить какое-то состояние.

Тут есть пару вариантов:

  • Можно сущность сделать синглтоном. У вас будет единственный экземпляр который может жить на протяжении всего приложения.

  • Второй вариант это привязать эту сущность к жизни активити в которой живут фрагменты. Это может быть Presenter или ViewModel или что-то еще, что привязано именно к активити.

→ Ссылка