android - Paging 3 如何处理数据并与房间交互
问题描述
所以我最近一直在与 paging 3 库进行交互,我学到了很多关于它的知识,但是有一些东西仍然很难掌握。我的问题分为两点,第一点可能是错误,第二点纯粹是信息性的。
第一点:我注意到将 initialLoadSize 设置为与页面大小相同的大小(我没有尝试其他值)会使适配器在完成加载时跳来跳去(这意味着屏幕外加载在不交互时开始移动列表位置) 如果这不是错误,那么第一点是“适配器如何(以及使用哪些用户可设置的参数)确定加载后何时移动列表(将哪些项目居中)。
第二点:为了修复第一点的行为,我已将 initialLoadSize 恢复为默认值。我还需要实现我自己的与房间交互的分页源(因为由于某些应用程序逻辑,我需要在列表中进一步加载一些项目,然后再通过分页加载它们,这会阻止分页加载任何更多项目之后这些)并且我无法弄清楚如何处理分页源中的所有边缘情况(例如何时将下一个和上一个键设置为空,以及何时根据参数设置之前和之后的项目)。因此,为了更好地理解这一点,也许有人可以解释参数如何相互作用。
我可能应该澄清一下,我还使用了远程调解器,并且我正在将房间寻呼源包装在我自己的寻呼源中。
我目前正在处理的项目是:https ://gitlab.com/sedestrian/pokedex 在“恢复的分页源逻辑”提交下的“开发”分支中。
提前致谢。
解决方案
我注意到将 initialLoadSize 设置为与页面大小相同的大小(我没有尝试其他值)会使适配器在完成加载时跳来跳去(这意味着屏幕外加载在不交互时开始移动列表位置)如果这个不是错误,第一点是“适配器如何(以及使用哪些用户可设置的参数)确定加载后何时移动列表(将哪些项目居中)。
跳来跳去是什么意思?在初始加载之前,没有任何数据对吗?
我猜你的意思是在无效/配置更改案例中 - 在刷新时,为了让 diffutil 保留你的位置,你需要加载用户当前正在查看的大约相同的位置PagingState.anchorPosition
,所以你必须PagingSource.getRefreshKey
以一种方式实现为后续刷新提供一个键,至少填充以 . 为中心的当前视口PagingState.anchorPosition
。更大initialLoadSize
可以让你在你的钥匙有多远方面更加灵活,所以这是一种可能的情况,改变尺寸会导致它“跳跃”。
为了修复第一点的行为,我已将 initialLoadSize 恢复为默认值。我还需要实现我自己的与房间交互的分页源(因为由于某些应用程序逻辑,我需要在列表中进一步加载一些项目,然后才能通过分页加载它们,这会阻止分页加载任何更多项目之后这些)并且我无法弄清楚如何处理分页源中的所有边缘情况(例如何时将下一个和上一个键设置为空,以及何时根据参数设置之前和之后的项目)。因此,为了更好地理解这一点,也许有人可以解释参数如何相互作用。
adapter.getItem(index)
您可以通过简单地调用或触发手动加载differ.get(index)
。这就是 bind 本质上触发 Paging 加载的方式,但是您需要小心PagingConfig.maxSize
,因为加载太早会导致视口中的页面下降,以便 Paging 可以maxSize
在加载请求的页面时尊重 。
null
如果没有更多要加载的内容并且您已到达数据集的末尾(最后一页或第一页),nextKey
则应设置为 on 。prevKey
itemsBefore
anditemsAfter
用于控制占位符的数量,如果禁用,则此计数基本上被忽略PagingConfig.enablePlaceholders
,在这种情况下最好保留未定义的默认值。这用于计数数据集。请阅读官方文档,因为那里有一些可能对您有帮助的信息:https ://developer.android.com/reference/kotlin/androidx/paging/PagingSource.LoadResult.Page
推荐阅读
- ios - UIPickerView 将数据传递给容器视图
- php - php array_diff错误reuslt
- python-3.x - 在决策树上制作决策面图时出错
- reactjs - 如何解决 Bootstrap next.js 应用程序中的错误“无法设置未定义的属性 'emulateTransitionEnd'”?
- javascript - 带有 JS 和 CSS 的幻灯片图像同时显示
- java - 在保护 Sheet Apache POI 中启用排序
- azure - Azure DeployIfNotExist Policy 评估但不部署模板/显示兼容
- c - 传递特殊字符作为参数
- elasticsearch - Elasticsearch 多数据路径磁盘已满
- database - sqlite3.OperationalError:靠近“”:语法错误。我认为我们的语法是正确的,但它总是向我显示这个错误