我正在查看 GridLayoutManager 及其 RecyclerView 的 SpanSizeLookUp 类的文档。但是我无法了解 SpanSizeLookUp 类的 getSpanGroupIndex 和 getSpanIndex 方法。我还通过覆盖和返回任意数字(小于跨度计数)进行了实验。但是我不知道它是做什么用的。
我无法理解文档说明。我想清除这个。
最佳答案
默认情况下,网格布局中的每个项目占用 1 个跨度。如果 Grid 是水平的,则 span 表示一行,如果 Grid 是垂直的,则 span 表示一列。如果您的项目可能需要将自己布局为多个跨度(例如,3 列网格中的标题项目将具有 spanSize=3),您可以提供一个 SpanSizeLookup,如果项目是标题项目则返回 3,如果它是常规项目则返回 1 .
当 GridLayoutManager (GLM) 需要决定项目的跨度时,它会调用 SpanSizeLookup 中的 getSpanIndex。该方法遍历给定位置之前的每个项目,以确定该项目应放置在哪个跨度。
例如,如果您调用 glm.scrollToPosition(n)
,SpanSizeLookup 遍历从 0 到 N 的每个项目,检查每个项目消耗了多少跨度并确定项目在 的位置N
将被定位。假设您在索引 0 和 3 处有一个带有标题行的网格,其余项目占用 1 个跨度。如果 GLM 调用 spanSizeLookup.getSpanIndex(4)
,它将为 0 1 2 3
调用 getSpanIndex
,意识到在第 3 项之后,下一项应该是放置在跨度 0 处并返回。
虽然它缓存了这些结果,但是如果你可以更快地计算它,遍历所有项目是低效的。例如,也许您知道所有项都需要 1 个跨度,那么您可以覆盖 getSpanIndex
并返回 n % spanCount
。这就是该方法公开的原因。
getSpanGroupIndex
是项目的组。如果 GLM 是垂直的,则组是“行”,如果 GLM 是水平的,则组是“列”。它主要用于可访问性。对于上面每个项目消耗 1 个跨度的示例,您可以覆盖此方法并返回 n/spanCount
。我同意此方法不明确,将创建一个改进文档的票证。
关于android - SpanGroupIndex 和 SpanIndex 回收器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623852/