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
相关产品推荐
相关产品推荐

