@beem7

Как сделать хранение данных в памяти между разными активити с возможностью observe?

Вот у нас есть активити с неким списком. Который пользователь может редактировать. Стало быть, архитектура такая: List (в нем лежат данные), RecyclerView и RecyclerView.Adapter.

Кроме того, есть возможность сохранять данные в shared preferences и подгружать их оттуда. Подгружаем мы в onCreate, а для сохранения у нас есть функция, которую мы дергаем из обсервера адаптера, чтобы точно дернулось при любых изменениях. Сохраняет она только не-transient поля моделей.

Все прекрасно. Но, при нажатии на каждый элемент списка должна открываться уже другая активити. На которой к тому же есть кнопка "Скачать" (файл). И по этой кнопке начинается скачивание. И вот результат этого скачивания должен отображаться как в этой активити, так и в активити списка (в этом элементе списка).

И тут непонятно, как быть. Я, конечно, могу вообразить, что Adapter дает и такую возможность. Сделать специальный класс InMemoryDB и положить адаптер в публичное статическое поле этого класса. И сам объект List тоже положить в такое же поле. И дергать их из обеих активити спокойно. И даже в классе InMemoryDB написать какие-то хелперы, чтобы эти дергания сделать более DRY и меньше был риск допустить ошибку.

Но все равно же спагетти, и чувствуется, что я забиваю гвозди микроскопом, наваливаю на инструмент (Adapter) тот функционал, к которому он не приспособлен. Хотя бы потому. что Adapter - это RecyclerView.Adapter, а я из него с таким же успехом сделаю хранилище данных, которые вообще нигде не отображаются в RecyclerView.

А как правильно?
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
В общем тебе всё правильно сказали про single activity. Должны быть очень веские основания для того, чтобы использовать больше одной активити. Внутри всё разруливается фрагментами или их аналогами.
Теперь, когда ты перейдешь на фрагменты, можно между ними нормальный di сделать, и не запариваться.
Адаптер нужен только для отображения данных в ui, всё, больше он ничего делать не должен.
См паттерн Repository.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы