Я использую библиотеку Paging из Android Jetpack, чтобы иметь постраничную загрузку в мой RecyclerView
. Я загружаюсь напрямую из сети, поэтому у меня нет промежуточного кеша или базы данных в памяти. Когда что-то меняется, я вызываю invalidate()
на DataSource
(в моем случае PositionalDataSource
), чтобы список обновился.
Мне нужна очень простая вещь - как только я вызываю invalidate()
, представление ресайклера полностью очищается и показывает пустые данные. Мне нужно представление ресайклера, чтобы сохранить старые данные и нормально обновляться после поступления новых. В большинстве случаев обновление может быть очень маленьким, например, изменение цвета кнопки в нескольких строках, это выглядит некрасиво, когда RecyclerView
показывает пустой контент на пару секунд, пока я загружаю данные из бэкэнда.
Можно ли это как-то сделать или есть концептуальные ограничения текущей архитектуры библиотеки подкачки, вынуждающие меня реализовать собственное кэширование?
PositionalDataSource
, а не источник данных ItemKeyed или PageKeyed? - person EpicPandaForce   schedule 17.04.2020LiveData<PagedList<T>>
должен иметь возможность удерживать предыдущее значение, если оно не будет перезаписано новым из DataSource. Я предполагаю, что реальный вопрос заключается в том, почему вы получаете новый PagedList, просто делая недействительным, но еще не имея данных. Если это принудительно, может быть, пустой ответ можно проигнорировать ...? - person EpicPandaForce   schedule 18.04.2020PagedList
естьdetach
функция, которая позволяет сохранить старое состояние представления ресайклера, как только я обнаруживаю, что мне нужно перезагрузить мои объекты. Однако после отсоединения ничего не произойдет, поскольку внутренние вызовы запускаются PagedList автоматически. - person frangulyan   schedule 19.04.2020