如何使用 Paging 3 库更新单个项目
How to update single item using Paging 3 library
我正在尝试使用 Paging 3 库中的 PagingAdapter 找到一种方法来更新回收站视图中的单个项目。我只找到一种使用 PagingAdapter.refresh() 方法的方法。但是这种方法强制从网络加载所有列表。有谁知道如何在不从网络加载所有页面的情况下实现它?
目前,更新支持数据集的唯一方法是使列表失效并重新加载。对于使用缓存层(在诸如房间或内存中的数据库中)的分层源来说,这通常是一个可以接受的廉价选项,尽管正在进行的工作是支持更细粒度的更新(参见 https://issuetracker.google.com/160232968)。
就目前的分层源而言,您需要将网络调用移动到 RemoteMediator
中,您可以在 Pager
的构造函数中注册它,并将您的网络提取缓存到一个像 Room 这样的数据库(它可以为你生成一个 PagingSource
实现),或者你自己写一个内存中的。
示例:
fun markItemAsRead(position: Int) {
snapshot()[position].read = true
notifyItemChanged(position)
}
(adapterComment.snapshot().items as MutableList<Model>)[position].likeStatus = 0
adapterComment.notifyItemChanged(position)
我正在尝试使用 Paging 3 库中的 PagingAdapter 找到一种方法来更新回收站视图中的单个项目。我只找到一种使用 PagingAdapter.refresh() 方法的方法。但是这种方法强制从网络加载所有列表。有谁知道如何在不从网络加载所有页面的情况下实现它?
目前,更新支持数据集的唯一方法是使列表失效并重新加载。对于使用缓存层(在诸如房间或内存中的数据库中)的分层源来说,这通常是一个可以接受的廉价选项,尽管正在进行的工作是支持更细粒度的更新(参见 https://issuetracker.google.com/160232968)。
就目前的分层源而言,您需要将网络调用移动到 RemoteMediator
中,您可以在 Pager
的构造函数中注册它,并将您的网络提取缓存到一个像 Room 这样的数据库(它可以为你生成一个 PagingSource
实现),或者你自己写一个内存中的。
示例:
fun markItemAsRead(position: Int) {
snapshot()[position].read = true
notifyItemChanged(position)
}
(adapterComment.snapshot().items as MutableList<Model>)[position].likeStatus = 0
adapterComment.notifyItemChanged(position)