Библиотека подкачки Android 3, группировка элементов

#android #android-paging #android-paging-library #android-paging-3

Вопрос:

Мы разрабатываем приложение для чата. Если сообщения содержат изображения, и они приходят одно за другим, мы в адаптере группируем эти изображения в одно сообщение.

Вопрос 1

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

Мы хотим реализовать библиотеку подкачки, чтобы иметь возможность прокручивать любое сообщение в истории. В настоящее время мы используем a RemoteMediator<Int, Message> , который делает запросы на наш сервер и получает сообщения. Для хранения этих сообщений мы используем Room , который возвращает PagingSource<Int, Message> . Для отображения сообщений мы используем PagingDataAdapter

Все работает хорошо, вопрос в том, как мы можем реализовать эту логику группировки изображений в подкачке 3? На каких шагах и когда мы можем внести это изменение и объединить сообщение в одно?

Пример:

 Message1_Text1 - Message2_Image1 - Message3_Image2 - Message4_Text2
 

После группировки мы должны получить

 Message1_Text1 - Message2_(Image1_Image2) - Message3_Text2
 

Вопрос 2

В зависимости от того, что это за сообщения before , и after мы показываем сообщения по-разному, например, мы показываем значок профиля только в первом сообщении, все остальные сообщения от того же пользователя отображаются без значка профиля.

Мы можем изменить наши данные, PagingData.map{} но у нас нет никакой информации об элементах » до » и «после». Как этого можно достичь?

Комментарии:

1. Преобразования поверх данных по страницам позволяют выполнять итерацию только по одному элементу за раз, поэтому, если вы хотите агрегировать элементы, я бы попробовал многоуровневый подход, при котором RemoteMediator извлекает следующие элементы и обновляет кэш / БД в памяти, который выполняет агрегацию при вставке и предоставляет агрегированные элементы для подкачки.