首页 > 解决方案 > Paging 3 如何处理数据并与房间交互

问题描述

所以我最近一直在与 paging 3 库进行交互,我学到了很多关于它的知识,但是有一些东西仍然很难掌握。我的问题分为两点,第一点可能是错误,第二点纯粹是信息性的。

第一点:我注意到将 initialLoadSize 设置为与页面大小相同的大小(我没有尝试其他值)会使适配器在完成加载时跳来跳去(这意味着屏幕外加载在不交互时开始移动列表位置) 如果这不是错误,那么第一点是“适配器如何(以及使用哪些用户可设置的参数)确定加载后何时移动列表(将哪些项目居中)。

第二点:为了修复第一点的行为,我已将 initialLoadSize 恢复为默认值。我还需要实现我自己的与房间交互的分页源(因为由于某些应用程序逻辑,我需要在列表中进一步加载一些项目,然后再通过分页加载它们,这会阻止分页加载任何更多项目之后这些)并且我无法弄清楚如何处理分页源中的所有边缘情况(例如何时将下一个和上一个键设置为空,以及何时根据参数设置之前和之后的项目)。因此,为了更好地理解这一点,也许有人可以解释参数如何相互作用。

我可能应该澄清一下,我还使用了远程调解器,并且我正在将房间寻呼源包装在我自己的寻呼源中。

我目前正在处理的项目是:https ://gitlab.com/sedestrian/pokedex 在“恢复的分页源逻辑”提交下的“开发”分支中。

提前致谢。

标签: androidandroid-pagingandroid-paging-libraryandroid-paging-3

解决方案


我注意到将 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

itemsBeforeanditemsAfter用于控制占位符的数量,如果禁用,则此计数基本上被忽略PagingConfig.enablePlaceholders,在这种情况下最好保留未定义的默认值。这用于计数数据集。请阅读官方文档,因为那里有一些可能对您有帮助的信息:https ://developer.android.com/reference/kotlin/androidx/paging/PagingSource.LoadResult.Page


推荐阅读