RecyclerView的GridLayoutManager动态跨度计数

Gun*_*lan 3 android gridlayoutmanager android-recyclerview

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

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了以下输出。但是我希望D和E在水平方向上对齐。我不怎么做。

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

因此,请允许我获得帮助,以使某些列应具有1个1行,而某些列仅具有2行(水平均等对齐),而另一些则具有3行。

在此处输入图片说明

Lev*_*ira 7

在这种情况下,您应该使网格布局具有3个以上的单元。您需要选择一个适用于所有三种类型的单元格的数字,一个6是好的,因为按行有3个单元格将返回2。要按行有2个单元格,您将返回3并具有每行1个单元格,您将返回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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)