我正在查看gridlayoutmanager的文档及其用于recyclerview的spansizelookup类。但是我无法了解SpanSizeLookup类的getSpanGroupIndex和getSpanIndex方法。我还尝试了重写和返回任意数(小于SPAN计数)。但我不知道它是用来干什么的。
我不能理解文档说明。我想澄清一下。
最佳答案
默认情况下,网格布局中的每个项采用1个跨度。如果网格是水平的,则SPAN表示一行;如果网格是垂直的,则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)
它将为getSpanIndex
调用0 1 2 3
,请意识到在第三个项之后,下一个项应该放在SPAN 0并返回它。
尽管它会缓存这些结果,但如果能够更快地计算,遍历所有项是低效的。例如,您可能知道所有项都需要1个跨度,然后可以覆盖getSpanIndex
并返回n % spanCount
。这就是为什么这种方法是公开的。getSpanGroupIndex
是项目的组。如果glm是垂直的,则group是“row”;如果glm是水平的,则group是“column”。主要用于无障碍。对于上面的示例,每个项使用1个跨度,可以重写此方法并返回n / spanCount
。我同意这个方法不清楚,会创建一个改进文档的票证。