Android PagedList 更新

标签 android android-architecture-components

我的问题是如何更新 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/

相关文章:

android - 如何在 Android 中的 Facebook 页面墙上发帖?

php - 从 Android-App 获取网页上的 POST 数据?

android - 在导航组件中包含来自 Backstack 的 fragment

android - 是否可以在android的新导航组件中发送字符串或整数以外的参数

android - 无法在后台线程上调用 observeForever

android - Joda time forPattern 不能正确处理 4 位数年份

android - 以编程方式进行 Linearlayout - 如何设置分隔线?

android - Retrofit 2.X - Response vs Call - 推荐使用什么?

安卓导航组件。显示全屏对话框,导航图标从箭头变为十字

android - 在没有 LifecycleOwner 的自定义 View 中设置 LiveData 观察器