You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中使用spanSizeLookup根据ItemViewType设置GridLayoutManager跨度

Kotlin 实现GridLayoutManager指定Item跨整行方案

Kotlin中通过对象表达式替代Java的匿名内部类写法,即可完成SpanSizeLookup的配置,核心判断逻辑和Java版本完全一致,仅做语法适配。

不需要找专门的Kotlin版spanSizeLookup文档,它的API逻辑和Java完全通用,只要写法符合Kotlin语法规则即可正常运行。

修正后的可运行代码

直接替换你原来的GridLayoutManager初始化部分即可:

binding.lmHomeStatusRecyclerViewList.apply {
    val layout = GridLayoutManager(context, 2).apply {
        spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
            override fun getSpanSize(position: Int): Int {
                return when (obAdapter.getItemViewType(position)) {
                    // 替换0为你自己定义的标题类型常量,比如你注释里写的NAME
                    0 -> 2 // 返回值等于总列数时,对应条目占满整行
                    else -> 1 // 普通条目占1列宽度
                }
            }
        }
    }
    layoutManager = layout
    setHasFixedSize(true)
    obAdapter.list = dataManager.loDataList
    adapter = obAdapter
}

注意事项

  • 跨整行的返回值必须和你初始化GridLayoutManager时传入的列数一致:比如设置2列就返回2,3列布局要占满整行就返回3。
  • 如果你的adapter实例是在layoutManager设置完成后才初始化,要确保getSpanSize方法中调用的adapter实例已经完成数据加载,避免出现类型判断错误。
  • 不需要额外调用其他配置方法,设置完spanSizeLookup属性后,RecyclerView布局时会自动计算每个条目的跨度。

内容的提问来源于stack exchange,提问作者SirHammouD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:01:59