bal*_*ekg 20 android kotlin android-paging android-paging-3
我从 Paging 2 迁移到 Paging 3 库,现在我使用它PagingSource从服务器加载数据页面。但我很难理解getRefreshKey必须在那里重写的方法。我找到了一些代码示例,如何根据用于获取后续页面的密钥来实现它,但我仍然不明白。基于这些示例,我编写了以下代码:
override fun getRefreshKey(state: PagingState<Pair<String, String>, User>): Pair<String, String>? {
return state.anchorPosition?.let { anchorPosition ->
state.closestPageToPosition(anchorPosition)?.prevKey
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我使它始终返回 null,它不会改变任何事情:
override fun getRefreshKey(state: PagingState<Pair<String, String>, User>): Pair<String, String>? = null
Run Code Online (Sandbox Code Playgroud)
那么我为什么不能选择最简单的解决方案呢?还是有我没有看到的用例?
Ale*_*ejB 14
所以,这就是区别:
假设您有工作清单。用户正在滚动列表,并且列表中存在一些更改(可以说数据已更新)。然后:
getRefreshKey() 始终返回 null 的情况:当您的数据更新时,将出现一对新的 PagingSource 和 PagingData,这意味着分页库。需要重新加载列表。如果 getRefreshKey() 返回 null,那么它将不知道上次访问的是哪个页面,并将用户返回到列表的开头(因为位置的键将由 load() 中的键决定)。
另一方面,如果 getRefreshKey() 正确实现,则: paging lib. 会知道最后访问的位置并且列表不会跳到顶部。相反,它将显示上次访问的页面。
根据这里的信息
getRefreshKey()由于现有的失效,提供了key用于下一个初始加载的. 提供给via 。可以通过 检索上次访问的项目,这通常是 中最顶部或最底部的项目,因为当滚动到 中时,绑定项目会触发访问。pagingSourcepagingSourcekeyloadLoadParams.keypositionstate.anchorPositionviewportview
和描述Key表明
key失效后传递给下一代的load初始使用。load返回key的getRefreshKey应该加载以用户当前视口为中心的页面。key如果不能确定正确,null可以返回让决定使用load什么。default key
这里,load是Loading APIfor PagingSource。
现在我不是在讨论一个用例,它对您是否应该null始终传递密钥产生影响,但它没有提到null 在这里传递的任何缺点,并且它指出load可以决定是否default key有null密钥。
| 归档时间: |
|
| 查看次数: |
7568 次 |
| 最近记录: |