android - SpanGroupIndex 和 SpanIndex 回收器 View

标签 android android-recyclerview gridlayoutmanager

我正在查看 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/

相关文章:

android - 无法在适配器中使用 Intent

android - onsizechanged 和 surfacechanged 之间的区别?

android - 帮助 : how can i do "include(in xml)" programmatically in my app Android?

android - 使用 fragment 时不显示选项卡内容

java - 如果在另一个 Activity 中添加数据,如何更新 recyclerView?

Java GridLayout 如何动态改变网格布局

android - 如何从回收者 View 将结果返回到 fragment

android - RecyclerView 位于工具栏下方

java - 如何在 GridLayoutManager 中改变每条偶数行的方向?

android - RecyclerView GridLayoutManager : how to auto-detect span count?