SpannedGridLayoutManager 1.x到3.x升级完全指南:10分钟完成API迁移 SpannedGridLayoutManager 1.x到3.x升级完全指南10分钟完成API迁移【免费下载链接】SpannedGridLayoutManagerAndroid RecyclerView.LayoutManager that resizes and reorders views based on SpanSize项目地址: https://gitcode.com/gh_mirrors/sp/SpannedGridLayoutManagerSpannedGridLayoutManager是一个 Android RecyclerView 布局管理器能根据每个视图的 SpanSize宽高跨数自动调整大小并重新排序智能填满所有空隙打造瀑布流式混排网格。它的 1.x → 2.x → 3.x 三次大版本各有一处破坏性 API 变更。别担心整篇指南带你 10 分钟完成全部迁移改动量不到 10 行代码。一、三个版本的变更总览版本关键变更迁移成本1.x → 2.x用SpanLayoutParams替代RecyclerView.LayoutParams设置 SpanSize改 1 行2.x → 3.x删除SpanLayoutParams改用SpanSizeLookup提供 SpanSize改几行3.0.1 / 3.0.2修复 overscroll、视图回收等滚动问题直接升级核心原理该库用空闲矩形算法寻找空隙并决定视图落点详细推导见项目自带的论文 free_space_algorithm.pdf。二、第 1 步升级依赖1 分钟只需把版本号改成 3.0.2dependencies { implementation com.arasthel:spannedgridlayoutmanager:3.0.2 }三、第 2 步1.x → 2.x 的变更——SpanLayoutParams 登场2.x 之前SpanSize 直接借用RecyclerView.LayoutParams的宽高两个值来传递引发了严重的布局问题因此 2.0 引入了专用的参数类。1.x 旧写法onBindViewHolder中holder.itemView.layoutParams RecyclerView.LayoutParams(width, height)2.x 新写法holder.itemView.layoutParams SpanLayoutParams(SpanSize(width, height))SpanSize(width, height)表示该视图横向跨 width 格、纵向跨 height 格。定义见 SpannedGridLayoutManager.kt。四、第 3 步2.x → 3.x 的变更——SpanLayoutParams 退场 ⚡这是迁移中唯一真正的破坏性变更。3.x 为了修复回收与性能问题重写了整个布局与回收流程SpanLayoutParams不再需要你可以安全地把它从 Adapter 中全部删掉。取而代之的是在 LayoutManager 上设置SpanSizeLookup用法和原生GridLayoutManager的 spanSizeLookup 几乎一致val layoutManager SpannedGridLayoutManager( orientation SpannedGridLayoutManager.Orientation.VERTICAL, spans 4) layoutManager.spanSizeLookup SpannedGridLayoutManager.SpanSizeLookup { position - SpanSize(1, 1) // 每个视图默认占 1x1 } recyclerView.layoutManager layoutManager一个实用技巧如果你的 SpanSize 计算逻辑很复杂可以开启缓存spanSizeLookup.usesCache true数据变化后调用invalidateCache()使缓存失效即可。这两个 API 同样定义在 SpannedGridLayoutManager.kt 的SpanSizeLookup类中。五、理解布局原理空闲矩形如何填缝3.x 的精髓在于空隙填充每当一个视图需要落位算法先找到与它相邻或相交的空闲矩形把它切成上下左右四个子矩形再放回空闲列表。于是后面序号的视图如果恰好能填进更靠前的空隙会被提前摆放——这正是重排序的来源。需要注意的性能特性3.0 为保证布局正确会在每次整体重排时预计算并缓存全部视图的矩形。官方实测 1 万条数据约 55~135ms、5 万条约 200~530ms常规列表毫无压力若是无限滚动场景建议关注数据量增长带来的重排耗时。六、迁移后必查清单 ✅依赖已改为3.0.2Adapter 中所有SpanLayoutParams相关代码已删除已设置spanSizeLookup未设置时所有视图按 1x1 处理滚动位置恢复该管理器会改变屏幕上视图顺序默认禁用了滚动位置恢复。如果你确信 item 位置变化不大可开启spannedGridLayoutManager.itemOrderIsStable true需要 Item 变化动画时Adapter 中调用setHasStableIds(true)、覆写getItemId返回稳定 id并用notifyDatasetChanged()触发重排完整用法可参考示例工程 MainActivity.kt 与 GridItemAdapter.kt。七、迁移耗时小结步骤内容耗时1更新依赖版本~1 分钟2删除SpanLayoutParams2.x 用户~2 分钟3添加SpanSizeLookup~3 分钟4验证滚动位置与动画~4 分钟至此你的项目已完成 SpannedGridLayoutManager 从 1.x 到 3.x 的完整升级 【免费下载链接】SpannedGridLayoutManagerAndroid RecyclerView.LayoutManager that resizes and reorders views based on SpanSize项目地址: https://gitcode.com/gh_mirrors/sp/SpannedGridLayoutManager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

基于SpringCloud的分布式演唱会抢票系统(毕业设计项目源码+文档)

基于SpringCloud的分布式演唱会抢票系统(毕业设计项目源码+文档)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/27 18:28:29
EV 驱动电机零转速满转矩起步(Align→OpenLoop→FOC)Simulink 建模

EV 驱动电机零转速满转矩起步(Align→OpenLoop→FOC)Simulink 建模

目录 一、为什么“零转速满转矩起步”要单独做 二、起步控制原理简述 2.1 预定位(Align / Pre‑Excite) 2.2 开环旋转(Open‑Loop Voltage‑Oriented) 2.3 切闭环 FOC 三、关键参数 四、Simulink 建模(手把手) 4.1 Step 1️⃣ —— PMSM + Inverter + 坐标变换(同…

2026/8/27 18:28:29
为什么滤波器电容必须做真空注胶滤波器电容是变频器、新能源逆变器、车载充电机(OBC)、UPS、光伏储能、通信电源等高压设备的关键元件

为什么滤波器电容必须做真空注胶滤波器电容是变频器、新能源逆变器、车载充电机(OBC)、UPS、光伏储能、通信电源等高压设备的关键元件

一、为什么滤波器电容必须做真空注胶滤波器电容是变频器、新能源逆变器、车载充电机(OBC)、UPS、光伏储能、通信电源等高压设备的关键元件。它长期工作在高电压、高频率、高温升环境下,对内部绝缘性、抗振性、散热性能、防潮等级有极高要求。…

2026/8/27 18:28:29
Level 4自动驾驶系统设计46——L2/L3 级软硬件架构 2

Level 4自动驾驶系统设计46——L2/L3 级软硬件架构 2

8.3 片外高刚性独立安全 MCU(如英飞凌 TC 系列)的接口分配与底软窗口看门狗(WWD)硬核防御 8.3.1 跨芯片级故障蔓延与 MCU “最后一道防线”的物理刚性 在 8.2 节关于 Level 3 级单芯片方案性能瓶颈的白盒解耦中,我们证实了在单片大算力 SoC 挂载 32G/64G 内存的商业包络…

2026/8/27 18:28:29
解密prompt系列27. LLM对齐经验之如何降低通用能力损失

解密prompt系列27. LLM对齐经验之如何降低通用能力损失

前言 前面我们已经聊过众多指令微调的方案,这一章我们重点讨论下如何注入某一类任务或能力的同时,尽可能不损失模型原有的通用指令理解能力。因为在下游或垂直领域应用中,我们设计的推理任务风格或形式,往往很难通过prompt来稳定实…

2026/8/27 18:28:29
智能体编排先把运行边界写进系统

智能体编排先把运行边界写进系统

智能体编排先把运行边界写进系统 智能体服务出现内存告警时&#xff0c;先区分单次请求峰值、长期泄漏和容器配额不足。下面的命令用于检查状态&#xff0c;名称和输出需替换为自己的环境信息。 kubectl describe pod <pod-name> -n <namespace>如果调度器允许任务…

2026/8/27 18:23:29