Xmstr
@Xmstr

Android RecyclerView. Как правильно взять данные для элемента списка из нескольких источников?

У меня была коллекция определенных обьектов, которую я скармливал адаптеру. Адаптер расставлял нужные данные, которые которые хранились в этом обьекте в нужные места.
Теперь я расширяю возможности приложения. И мне надо отобразить в элементе RecyclerView данные, которые хранятся не только в одном обьекте определенного класса, коллекцию которых можно передать адаптеру, но и в другом, нов обьекте нового класса.

Объясню на примере:
Ранее в элемементе ресайклера отображались поля "name" и "surname" из обьекта user класса User.
Теперь мне в том же элементе ресайклера рядом надо поставить поле "orderName" из обьекта order класса Order
(User и Order также являются таблицами в БД. Я использую гугловскую библиотеку ROOM)
Проблема в том, что адаптер принимает только одну коллекцию определенных объектов.
Как правильно реализовать данную задачу? Может эта задача смахивает на какой-то паттерн или есть что-то, что повсеместно используют программисты (так как задача весьма типовая), а я не знаю
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ответы на вопрос 4
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Для адаптера сделать новую модель (не ту, что берется из бд), которая будет агрегировать в себе все нужные данные. Маппить бдшные модели в гуишные в презентере или интеракторе.
Ответ написан
kozinakoff
@kozinakoff
iOS-developer
Как я понимаю, между User и Order есть связь, верно?

В таком случае вы можете передавать в адаптер не коллекцию пользователей, а коллекцию из объектов UserOrder (ну или придумайте название получше ;-) ), которые будут содержат в себе всю необходимую информацию.

Почитайте про композицию и агрегацию
Ответ написан
@davidnum95
Что мешает в Order добавить поле User и в адаптер уже передавать коллекцию orders?
Ответ написан
@stoptalking
вы можете агрегировать ваши текущие модели в рамках общей модели, можете сделать для них общего наследника (или Object)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы