RecyclerView 的 GridLayoutManager 动态跨度计数

RecyclerView's GridLayoutManager dynamic span count

我正在使用以下代码动态更改跨度计数。

val layoutManager = GridLayoutManager(this, 3)
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
    override fun getSpanSize(position: Int): Int {
        when (position) {
            0, 1, 2 -> return 1
            3, 4 -> return 2
            5 -> return 3
            else -> return 1
        }
    }
}

我得到了以下输出。 但我希望 D 和 E 应该水平对齐。我不知道该怎么做。

实际上我在适配器中有 3 种类型,HEADER,TYPE_A,TYPE_BHEADER应该只有一行,而TYPE_A是3行,TYPE_B 是 2 行。

所以我可以得到帮助,使一些列应该有一个 1 行,一些只有 2 行(水平对齐),一些有 3 行。

在这种情况下,您应该让您的网格布局有 3 个以上的单元格。您需要选择一个适用于所有三种类型的单元格的数字,6 是好的,因为要按行有 3 个单元格,您需要 return a 2。要按行有 2 个单元格,您需要 return a 3 并按行有 1 个单元格 return a 6:

val layoutManager = GridLayoutManager(this, 6)
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
    override fun getSpanSize(position: Int): Int {
        when (position) {
            0, 1, 2 -> return 2
            3, 4 -> return 3
            5 -> return 6
            else -> return 2
        }
    }
}