【Jetpack Compose基础语法学与练】第14课 LazyColumn列表,滚动长列表基础实战

发布时间:2026/10/9 10:11:06

【Jetpack Compose基础语法学与练】第14课 LazyColumn列表,滚动长列表基础实战 前言本节课学习 LazyColumn 滚动列表替代传统Android的RecyclerView。LazyColumn只会渲染屏幕可见范围内的列表项实现复用适合长数据滚动列表。结合状态、Card卡片完成简单的展示实战。知识点清单LazyColumn基础结构对比ColumnColumn不会复用视图长列表会卡顿items{}循环渲染列表条目item{}渲染单独头部、尾部列表条目使用Card做列表项UI简单点击回调列表项交互实战完整示例源码ComposablefunLazyColumnDemoPage(){// 模拟数据源valdataList(1..20).map{index-条目$index}varselectedItembyremember{mutableStateOf()}Column(modifierModifier.fillMaxSize().padding(16.dp)){Text(text当前选中$selectedItem,fontSize18.sp,modifierModifier.padding(bottom12.dp))LazyColumn(modifierModifier.fillMaxSize(),verticalArrangementArrangement.spacedBy(10.dp)){// 头部单独一项item{Text(text 数据列表头部,fontSize20.sp,fontWeightFontWeight.Bold,modifierModifier.padding(vertical8.dp))}// 批量循环渲染多条数据items(dataList){itemText-Card(modifierModifier.fillMaxWidth().clickable{selectedItemitemText},elevationCardDefaults.cardElevation(defaultElevation4.dp),shapeRoundedCornerShape(10.dp)){Text(textitemText,modifierModifier.padding(16.dp),fontSize17.sp)}}}}}逐行解读LazyColumn vs ColumnColumn 一次性渲染全部子组件数据量大时页面卡顿没有复用机制不适合长滚动。LazyColumn 懒加载只渲染屏幕可视区域的条目自动复用条目适合长列表相当于旧版RecyclerView。DSL内部 item{ } 和 items(集合){}item { } 渲染单个条目用于头部、尾部不做循环。items(数据源集合) { it } 遍历数据源循环生成每一条列表UI。⚠️ LazyColumn内部不能直接写普通Compose组件必须放在item / items DSL块里面。Modifier.clickable{} 给Card增加点击列表条目点击直接使用修饰器 clickable 点击时把当前条目文本赋值给选中状态 selectedItem 上层文本自动刷新。verticalArrangement.spacedBy(10.dp)设置列表每一项之间的间距不需要手动给Card写margin。容易踩坑❌ 不要拿Column渲染上百条数据会出现性能问题。长滚动优先LazyColumn。❌ LazyColumn的花括号内部是DSL域不能直接写Text、Card必须包裹在item{}或者items{}里面。❌ 不要在LazyColumn外层写固定高度wrapContentLazyColumn需要明确的约束一般fillMaxSize占满剩余空间。✅ items优先传入真实数据源集合不要手写多次复制Card条目。多元化习题每道题后紧跟答案解读习题1【基础‑改错题】题目下面代码存在错误请修改。LazyColumn(){Text(测试文本)}答案LazyColumn(){item{Text(测试文本)}}解读LazyColumn属于特殊DSL作用域直接放置普通Compose组件编译报错单独元素必须写 item{ } 多条循环使用 items(集合){ } 。习题2【基础‑代码修改题】题目基于课程示例在列表最后增加一个尾部文本“——列表结束——”。答案在items(dataList)之后追加item{Text(text——列表结束——,modifierModifier.padding(vertical16.dp),fontSize18.sp)}解读尾部同样使用 item{} 放在items之后item专门用于头部、尾部这种非循环的单独条目不需要数据源。习题3【进阶‑补充代码题】题目模拟一个字符串集合 val fruitList listOf(“苹果”,“香蕉”,“橘子”,“葡萄”,“桃子”) 使用LazyColumnitems渲染全部水果每一项使用Card包裹。写出LazyColumn内部的items片段。答案items(fruitList){fruitName-Card(modifierModifier.fillMaxWidth(),elevationCardDefaults.cardElevation(3.dp)){Text(textfruitName,modifierModifier.padding(14.dp),fontSize17.sp)}}解读items(集合){ 变量 - UI } lambda里面的形参就是遍历出来的单条数据每一次循环生成一张CardLazyColumn自动做视图复用。习题4【综合‑逻辑应用题】题目改造示例点击列表Card之后把被点击条目的背景色改变用来标记已选中条目。提示保存被选中条目的索引写出关键逻辑。答案varselectedIndexbyremember{mutableStateOf(-1)}itemsIndexed(dataList){index,itemText-Card(modifierModifier.fillMaxWidth().clickable{selectedIndexindex},colorsCardDefaults.cardColors(containerColorif(selectedIndexindex)Color.LightGrayelseColor.White),elevationCardDefaults.cardElevation(defaultElevation4.dp)){Text(textitemText,modifierModifier.padding(16.dp),fontSize17.sp)}}解读如果需要拿到下标索引不要用items改用 itemsIndexed(数据源){ index,item - } 利用下标和选中索引做等值判断动态设置卡片背景状态改变触发重组刷新UI。习题5【概念简答题】题目说一说 LazyColumn 和 Column 的核心区别分别适合什么场景答案Column一次性渲染全部子组件没有视图复用适合少量静态布局。LazyColumn懒加载只渲染屏幕可见条目视图自动复用适合大量数据长滚动列表。解读少量静态UI布局优先Column当条目数量很多、需要上下滚动浏览时应当优先选用LazyColumn保障页面流畅性避免内存与卡顿问题。本节课知识点总结Column 普通垂直布局一次性渲染全部子组件适合少量静态内容长列表会卡顿。LazyColumn 垂直懒加载滚动列表相当于RecyclerView自动视图复用适合长数据。DSL语法 item { } 渲染单独头部尾部 items(list){} 循环批量渲染需要下标索引时使用 itemsIndexed(list){ index,item - } 。LazyColumn内部不能直接放置普通组件所有UI必须放在item / items代码块中。列表条目交互依然依靠状态驱动UI点击修改状态重组之后条目样式自动更新。下一课预告第15课 LazyRow横向滚动列表、简单搜索过滤列表实战
延伸阅读

更多相关文章

2026/10/9 11:06:27

清理大师的完整思路:深层垃圾定位与持久优化实战

说到“清理大师”,我第一反应是前阵子帮一个朋友处理他卡到怀疑人生的旧手机。那台机子用了快三年,打开微信要转三四秒圈圈,相册滑一滑就掉帧,64G的存储常年飘红。我花了大概一个晚上,没有刷机,没有恢复出厂…

2026/10/9 11:06:27

JavaWeb期末大作业:二手闲置交易系统设计与实现全解析

简介:这是一套面向JavaWeb期末大作业与课程设计的二手闲置物品交易系统完整源码,适合高校计算机相关专业学生参考与二次开发。平台围绕闲置物品的发布、浏览、交易与个人管理等核心场景展开,代码包含用户、商品、订单、留言等模块&#xff0c…

2026/10/9 11:06:27

医疗KBQA问答系统从零搭建:21万实体关系与朴素贝叶斯的闭环实践

简介:面向希望入门知识图谱问答的开发者,整套资源从零搭建了一个医疗领域KBQA问答系统,覆盖7类实体、约3.7万实体与21万实体关系,可完整体验意图识别、实体抽取、图谱构建和答案检索等核心流程,适合作为学习或演示项目…

2026/10/9 11:01:26

求解器并发架构:进程与线程的边界与协同

很多跑算法或做工程的同学,嘴上挂着“并发”和“多线程”,一到真正碰求解器这类计算密集型任务,就翻车。要么内存爆炸,要么直接死锁卡死,要么 CPU 都跑满了但业务吞吐量上不去。这些问题的根源,往往不是数学…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑