android - RecyclerView 的 GridLayoutManager 动态跨度计数

标签 android android-recyclerview gridlayoutmanager

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

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 行。

enter image description here

最佳答案

在那种情况下,您应该让您的网格布局有 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
        }
    }
}

关于android - RecyclerView 的 GridLayoutManager 动态跨度计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51244151/

相关文章:

java - 如何使用 GridLayoutManager 设置 RecyclerView 以匹配设备屏幕宽度?

java - 在 openCV 中使图像较暗的区域部分更亮

android - GridView 在 Android 中究竟是如何回收/重用 View 的?

android - 我应该在 ViewHolder 中的哪里解除 ButterKnife 8.x.x 的绑定(bind)?

android - 将 recyclerview 的卡片连接到谷歌地图中的标记

android - (Smooth)ScrollToPosition 不能与 RecyclerView 一起正常工作

android - 改造解析空数组[]

android - 如何检查已 Intent 发送的 URI 的权限?

java - 如何在 Android 中发出 httppost 请求?

java - RecyclerView onScrolled 根本没有被触发