RecyclerView 使用 GridLayoutManager 时,设置不同 viewtype 所占的 spanSize

15 篇文章 1 订阅
需求

当 RecyclerView 用于一行展示多个 item 时,会用到 GridLayoutManager .这时其他的 viewtype 可能仍然希望占据一整行,例如底部的加载更多view,如下图所示:
在这里插入图片描述

解决

  • 继承 GridLayoutManager.SpanSizeLookup() 类,重写 getSpanSize 方法.返回此item期望占据的 SpanSize
 		val layoutManager = GridLayoutManager(this, SPAN_COUNT)
        val spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
            override fun getSpanSize(position: Int): Int {
               // 根据实际情况处理需要返回的值.
               //例如我的代码中不同data类型对应不同的viewtype. 因此客户根据数据类型返回
                val item = items[position]
                return if (item is NoMoreData) SPAN_COUNT else 1
            }
        }
        layoutManager.spanSizeLookup = spanSizeLookup

备注: getSpanSize(position: Int) 中的 position参数 是RecyclerView真正的位置控制. 即使是占据了多个 SpanSize ,本质上也是一个 position

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值