我的问题是如何更新 PagedList 中的项目?
在我的例子中,有 ListActivity 和 DetailsActivity。 列表 Activity 使用分页组件从网络(仅)获取帖子,并使用分页适配器将其显示在回收站 View 中。 当用户按下某个帖子时,我需要获取帖子详细信息并将其显示在 DetailsActivity 中。我正在向服务器发出另一个请求,它返回我的帖子详细信息。调用之后,服务器会增加该帖子的 viewsCount 值,当用户返回到帖子列表时,我需要更新列表项中的计数器。
问题是,如何更新该 PagedList 中的单个项目(发布),因为我不需要从头重新加载所有列表,只需更新一个项目。
最佳答案
PagedList 是不可变的
我建议您不要使用分页库,因为它假设您的数据是不可变的,这在实际用例中几乎是不可能的。
您可以在 official docs 中查看.它说:
If you have more granular update signals, such as a network API signaling an update to a single item in the list, it's recommended to load data from the network into memory. Then present that data to the PagedList via a DataSource that wraps an in-memory snapshot. Each time the in-memory copy changes, invalidate the previous DataSource, and a new one wrapping the new state of the snapshot can be created.
即,
您必须从服务器获取数据,然后使用 room 库将其存储到本地数据库中,然后每当您必须更新任何项目时,将项目更新到本地数据库中,然后 room 将将这些更改反射(reflect)到 UI 中(使用 LiveData)。
但是你必须使用本地数据库进行分页。
如果有房间,你会有这样的东西。
@Dao
interface FeedDao {
@Query("SELECT * FROM feed ")
fun selectPaged(): DataSource.Factory<Int, Feed>
}
但是你必须处理更多的事情,比如:
如果一个实体从远程服务器中删除了怎么办。我们如何注意到这一点?
而且我们还必须将它从我们的本地数据库中删除。
您可以阅读 this文章来解决这个问题。它解释了分页库中的所有问题以及如果您真的想使用分页库的可能解决方法。
我的建议是使用this库并实现您自己的分页。
关于Android PagedList 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48255109/