android - 了解 PagingSource 的 getRefreshKey

标签 android kotlin android-paging android-paging-3

我从 Paging 2 迁移到 Paging 3 库,现在我使用 PagingSource从服务器加载数据页面。但我无法理解 getRefreshKey必须在那里重写的方法。我找到了一些代码示例,如何根据用于获取后续页面的 key 来实现它,但我仍然不明白。基于这些示例,我编写了以下代码:

override fun getRefreshKey(state: PagingState<Pair<String, String>, User>): Pair<String, String>? {
    return state.anchorPosition?.let { anchorPosition ->
        state.closestPageToPosition(anchorPosition)?.prevKey
    }
}
但是,如果我让它始终返回 null,它不会改变任何事情:
override fun getRefreshKey(state: PagingState<Pair<String, String>, User>): Pair<String, String>? = null
那么为什么我不能选择最简单的解决方案呢?还是有我看不到的用例?

最佳答案

所以,这将是不同的:
假设您有工作 list 。用户正在滚动列表,并且列表中有一些变化(可以说数据已更新)。然后:
getRefreshKey() 总是返回 null 的情况:
随着你的数据更新,会有一对新的 PagingSource 和 PagingData,意思是 paging lib。将需要重新加载列表。如果 getRefreshKey() 返回 null,那么它将不知道上次访问的是哪个页面,并将用户返回到列表的开头(因为位置的键将由 load() 中的键决定)。
另一方面,如果正确实现了 getRefreshKey(),则:
分页库。会知道最后访问的位置,并且列表不会跳到顶部。相反,它将显示最后访问的页面。

关于android - 了解 PagingSource 的 getRefreshKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68567971/

相关文章:

android - android 3.0+ 中的 ACTION_MEDIA_BUTTON 静态广播接收器

Android MediaStore 插入视频

android - 在 submitList 之后没有得到 PagedListAdapter 的 itemCount

android - 错误: Can't call startAt() or equalTo() multiple times

android - 将 Paging 3 alpha 更新为稳定导致索引问题 Android

Android相机 Intent

java - 将 Activity 中定义的布局更改为 xml 布局

android - 纯 kotlin 模块中的 "Empty test suite."。 (斯波克/安卓)

android - glide recyclerview 集成有哪些进展?

Android Retrofit入队方法没有返回值