Как мы можем изменять элементы, загруженные с помощью Paging 3 android?

Я загружаю сообщения из сети и для этого использую Paging 3, но теперь проблема в том, что элементы моего списка содержат кнопку Нравится/Не нравится, предположим, что нажата кнопка Нравится, тогда как я могу обновить данные для этого элемента без перезагрузки всего набора данных?

я прочитал это android-pagedlist-updates, но кажется, что это для более старой подкачки 2 или 1 , Итак, как добиться этого в Paging 3?


person Kulwinder Singh Rahal    schedule 30.07.2020    source источник
comment
вы смогли решить задачу?   -  person jake    schedule 06.11.2020


Ответы (2)


Я преодолеваю эту проблему с помощью механизма ниже. Поддерживайте внутреннюю хэш-карту для хранения ключа и объекта, держите эту внутреннюю хэш-карту внутри вашего адаптера списка страниц. По мере прокрутки списка вы добавите удаленные лайки/дизлайки во внутреннюю хэш-карту в качестве начального статуса, используя уникальный ключ, так как ключ уникален, вы не будете дублировать, а затем вы ссылаетесь на эту внутреннюю хэш-карту для своего пользовательского интерфейса обновления.

Слушатель лайков и антипатий onClick обновит эту внутреннюю хэш-карту. снова внутренняя хэш-карта является ссылкой для обновления пользовательского интерфейса.

Решение простое — сбор полезных данных на другой внутренней хэш-карте для последующей обработки.

person chethan    schedule 31.07.2020

В Paging3 вам по-прежнему нужно полагаться на PagingSource.invalidate для отправки обновлений, речь идет не столько о неизменности, сколько о наличии единого источника правды.

В общем, правильный способ сделать это — обновить резервный набор данных и вызвать invalidate, что вызовет REFRESH + DiffUtil, который не должен вызывать никаких изменений пользовательского интерфейса, но гарантирует, что если эта страница будет удалена и повторно загружена, загруженные страницы будут по-прежнему быть в курсе. Самый простой способ сделать это — использовать реализацию PagingSource, которая уже имеет встроенную самоинвалидацию, например ту, что предоставлена ​​Room, и просто обновить соответствующую строку при нажатии кнопки «Нравится/не нравится».

Существует открытая ошибка, отслеживающая работу по поддержке очень частых и детальных обновлений списка с помощью Flow‹›, за которой вы можете следить здесь, если это ваш вариант использования: https://issuetracker.google.com

person dlam    schedule 30.07.2020
comment
Я думаю использовать RemoteMediator, как описано здесь developer.android.com /topic/libraries/architecture/paging/, вы также имеете в виду использовать что-то подобное - person Kulwinder Singh Rahal; 31.07.2020
comment
Независимо от того, используете ли вы RemoteMediator, Pager по-прежнему требуется лямбда-выражение, которое создает PagingSource в своем конструкторе. Все загруженные и представленные данные по-прежнему основаны на том, что возвращает PagingSource. RemoteMediator просто позволяет вам выполнять удаленные вызовы для извлечения дополнительных данных (которые затем будут сохранены для PagingSource) в граничных условиях и сообщать об этом состоянии загрузки для синхронных обновлений на вашем адаптере. - person dlam; 31.07.2020