У меня есть список с нумерацией страниц, который я реализовал с помощью библиотеки подкачки.Элементы в этом списке могут быть изменены (изменены / удалены).Согласно официальной документации , я сначала изменяю кэш списка в памяти, из которого мои DataSource
получают страницы, а после этого вызывают datasource.invalidate()
, чтобы создать новую пару PagedList/DataSource
:
Если у вас есть более детальные сигналы обновления, такие как сетевой API, сигнализирующий об обновлении одного элемента в списке, рекомендуется загружать данные из сети в память.Затем представьте эти данные в PagedList через DataSource, который оборачивает снимок в памяти.Каждый раз, когда изменяется копия в памяти, делает недействительной предыдущий источник данных, и может быть создан новый источник данных с новым состоянием снимка.
Это работает и выглядит ХОРОШО, еслипользователь изменяет элементы на первой странице.
Однако, если пользователь находится на второй странице или дальше во время datasource.invalidate()
, он будет брошен в конце первой страницы .
Отладка показывает, что это происходит потому, что новая PagedList
имеет только первую страницу , когда она отправляется на PagedListAdapter.submitList
.Адаптер сравнивает старый и новый списки и удаляет все элементы не с первой страницы.Это происходит всегда, но не видно для пользователя, если он находится на первой странице.
Так что, мне кажется, новая пара PagedList/DataSource
не имеет представления о количестве страниц, которые извлекли предыдущую пару, а datasource.invalidate()
нетне подходит для ситуации в документах.Поведение, которое я считаю приемлемым для случаев, тогда пользователь обновляет весь список (например, пролистывание до обновления), но не
обновление для одного элемента в списке
Имееткто-нибудь сталкивался с такой проблемой или как-то архивировал вещи которые я хочу?Возможно, мне не хватает какой-то хитрости, которая помогает мне получить новые PagedList
уже со всеми страницами.
Для пояснения: версия библиотеки 2.1.0
.Пользовательский PageKeyedDataSource
на основе кэша в памяти и удаленного обслуживания (№ Room
)