代码之家  ›  专栏  ›  技术社区  ›  Gunaseelan

RecyclerView的GridLayoutManager动态范围计数

  •  3
  • Gunaseelan  · 技术社区  · 8 年前

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

    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 水平对齐。我不知道怎么做。

    实际上,我在适配器中有三种类型, 头,类型_A,类型_B . 页眉 应该只有一行,而且 小精灵 是3行, B型 是2行。

    所以我可以得到一些帮助,使一些列有一行,一些只有两行(水平对齐),一些有三行。

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  4
  •   Levi Moreira    8 年前

    在这种情况下,您应该使网格布局具有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
            }
        }
    }