Как сделать общую переменную для двух фрагментов?
Имеется RecyclerView в Фрагменте №1 и Фрагмент 2 с парой кнопок. Оба фрагменты внутри ViewPager. Из фрагмента №1 нажимая на кнопку я могу добавлять элементы в RecyclerView,но я хочу это делать из Фрагмента №2. То есть по нажатию кнопки во фрагменте создавать один item для Recyclerview и помещать его, при этом не переходя на фрагмент с RecyclerView. Я представляю это так, что надо сделать общий адаптер , устанавливать его во фрагменте с RecyclerView,а добавлять элементы в фрагменте без RecyclerView.Как это лучше сделать?Пока что только идея в том что бы связать их через активность,но там же проблемы будут также
Ответы (2 шт):
Вы ничего не рассказали про используемый стэк библиотек архитектурных, засим сложно показать вам конкретный код для вашего случая. Однако, видимо, вы ничего из этого не используете. Отсюда проблема - стандартными средствами реализовавывать то что вам нужно - неудобно. А нестандартными - нужно вникать в, скорее всего, незнакомые библиотеки, реализующие определённые паттерны проектирования, которые вы также, возможно не встречали в практике.
Засим вот вам краткое абстрактное описание решения:
- Создайте синглтон для хранения списка элементов, для отображения в списке.
- Изменяйте список из нужного места.
- Уведомляйте об изменениях в списке, чтобы перерисовать экран.
А вот так можно это реализовать с библиотеками:
- Берём
RxJava,RxAndroid,RxRelay+ToothPick - Создаём класс с
BehaviorRelay<List<Data>> - Биндим его экземпляр как синглтон с помощью ToothPick
- Инжектим экземпляры класса из п2 в оба фрагмента.
- Список отображаем, подписавшись на изменения источника данных из п.2
- Когда нужно, через BehaviorRelay из п2 отправлем новый список данных.
Не должно быть никаких переменных общих между двумя разными экранами. Если вам необходимо шарить какие-то данные между разными экранами, вы можете создать сущность которая будет жить независимо от этих экранов. Она уже может хранить какое-то состояние.
Тут есть пару вариантов:
Можно сущность сделать синглтоном. У вас будет единственный экземпляр который может жить на протяжении всего приложения.
Второй вариант это привязать эту сущность к жизни активити в которой живут фрагменты. Это может быть Presenter или ViewModel или что-то еще, что привязано именно к активити.