RecyclerView 入门

简介: RecyclerView是Android官方推荐的可滚动列表容器,替代ListView/GridView。核心为“回收复用”机制,提升性能。需配合Adapter(绑定数据)、ViewHolder(缓存控件)、LayoutManager(控制布局)三者使用,支持线性、网格、瀑布流等多种样式。

RecyclerView 是 Android 官方提供的可滚动列表容器,它是 ListView 和 GridView 的升级替代品。

它的核心设计理念是 "回收复用"——当某个条目滚出屏幕时,系统不会销毁它,而是把它"回收"起来,等新条目滚入时直接复用这个 View,避免重复创建。

2. 核心组成部分

RecyclerView 的使用需要掌握三个核心组件:

  • Adapter(适配器):搭桥人,把数据和 UI 布局连接起来
  • ViewHolder(视图持有者):持有 Item 中每个控件的引用,避免重复 findViewById
  • LayoutManager(布局管理器):决定 Item 排列方式

3. 实战

添加依赖

// app/build.gradle.kts
dependencies {
    implementation("androidx.recyclerview:recyclerview:1.3.2")
}

实现 Adapter

class ContactAdapter(
    private val contacts: MutableList<Contact>
) : RecyclerView.Adapter<ContactAdapter.ContactViewHolder>() {

    class ContactViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val name: TextView = itemView.findViewById(R.id.tvName)
        val phone: TextView = itemView.findViewById(R.id.tvPhone)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_contact, parent, false)
        return ContactViewHolder(view)
    }

    override fun onBindViewHolder(holder: ContactViewHolder, position: Int) {
        val contact = contacts[position]
        holder.name.text = contact.name
        holder.phone.text = contact.phone
    }

    override fun getItemCount(): Int = contacts.size
}

在 Activity 中使用

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.rvContacts)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.addItemDecoration(
            DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
        )

        val contacts = (1..20).map { i ->
            Contact(i.toLong(), "联系人 $i", "1380013800$i", R.drawable.ic_avatar)
        }.toMutableList()

        recyclerView.adapter = ContactAdapter(contacts)
    }
}

4. LayoutManager 三种模式

// 垂直列表
recyclerView.layoutManager = LinearLayoutManager(this)
// 水平列表
recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
// 网格(2列)
recyclerView.layoutManager = GridLayoutManager(this, 2)
// 瀑布流
recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)

5. 避坑指南

  • 忘记 LayoutManager:不设置就看不见内容
  • 数据变化没通知:contacts.add() 后必须调用 notifyItemInserted()
  • 混淆创建和绑定:onCreateViewHolder 负责创建,onBindViewHolder 负责填充

6. 总结

RecyclerView 是 Android 开发的基石组件,掌握它就能轻松实现各类列表界面。

相关文章
|
数据库
阿里云DTS数据迁移和数据同步的差异性分析
阿里云DTS作为一款常用的数据库表迁移工具,提供了功能非常类似的两个功能:数据迁移、数据同步。阿里云DTS产品官网对这两个功能模块进行了简单的区分: 场景1:存量数据批量迁移,建议使用数据迁移功能。 场景2:增量数据实时同步,建议使用数据同步功能。 实际上,无论是数据迁移还是数据同步,都可以做 “结构初始化”+“全量数据迁移”+“增量迁移”,因此两者功能差异并不明显。笔者在多个项目实践DTS数据迁移,在简单需求场景下,将DTS的数据迁移、数据同步进行对比和总结。
|
2月前
|
机器学习/深度学习 自然语言处理 C++
大模型应用:大模型实测对比:1.8B vs 6B,本地部署的极限拉扯与真实体感.119
本文对比Qwen1.5-1.8B与ChatGLM2-6B两大中文大模型:前者轻量易部署,CPU即可运行,代码简洁,但易幻觉、指令遵循弱;后者参数量大,中文理解与逻辑更强,但需GPU、加载复杂。二者代表“小而美”与“大而全”的典型路径。
490 2
大模型应用:大模型实测对比:1.8B vs 6B,本地部署的极限拉扯与真实体感.119
|
2月前
|
人工智能 自然语言处理 安全
阿里云百炼大模型平台详解:定位、模型矩阵、落地场景与计费方案
2026年6月正值阿里云“AI普惠计划”关键期,新用户可免费领取7000万Tokens、首月Pro版免费,企业用户享高额迁移补贴,是体验与落地百炼平台的最佳时机。未来,随着模型能力的持续迭代、应用生态的不断丰富、安全体系的日益完善,阿里云百炼将进一步渗透千行百业,成为企业与用户使用AI大模型的“标配平台”,助力中国AI产业规模化、普惠化发展。
845 1
|
2月前
|
人工智能 运维 JavaScript
保姆级教学!阿里云服务器从零搭建Hermes Agent AI智能体配置Token Plan流程
在AI智能体快速普及的当下,Hermes Agent凭借优秀的长会话交互、复杂任务拆解、深度逻辑推理能力,成为个人办公、学习辅助、项目协作、智能问答场景中备受青睐的开源AI应用。和传统对话工具不同,Hermes Agent主打多轮连续对话、上下文强记忆、复杂指令分步执行,能够承接逻辑链条长、步骤繁琐的工作任务,搭配主流大模型使用后,可极大提升日常工作与学习效率。
299 2
|
2月前
|
传感器 人工智能 开发工具
Meta AI眼镜百万销量:AI硬件的iPhone时刻到了?
Meta Ray-Ban AI眼镜2026年Q1销量破百万,标志端侧多模态AI落地成熟。依托Llama 4端侧模型(4B参数)、实时多模态感知与云边协同,开启第一视角智能新范式。开发者可借SDK、数据集与硬件工具链抢占生态先机。
335 8
|
4月前
|
JSON 前端开发 Java
【注解】@RequestBody与@ResponseBody 全方位对比全解
本文全方位解析Spring中`@RequestBody`与`@ResponseBody`:从`HttpMessageConverter`底层机制、数据流向(入站反序列化 vs 出站序列化)、使用限制、组合实践(`@RestController`)、配置技巧到高频踩坑,助你深入掌握RESTful接口开发核心。
|
2月前
|
安全 NoSQL Java
《ZAKU渗透论:卓伊凡的2026渗透工程》信息收集——黑客怎么找到你?
本章详解渗透测试中至关重要的信息收集环节:占全程50%以上工作量。涵盖被动(搜索引擎、GitHub、社交媒体、Whois、历史快照)与主动(DNS查询、子域名枚举、端口扫描、目录探测)两大策略,并聚焦2026年新趋势——供应链踩点。目标是绘制精准“攻击地图”,找到阻力最小的突破口。(239字)
277 2
|
2月前
|
人工智能 调度
如何独自完成工作任务
在AI智能体时代,“一个人干一个部门的活”成为现实:关键不在加班,而在任务拆解、工具协同与流程复用。善用大模型、AI工具与自动化工作流,将重复劳动交给智能体,人专注判断、创意与交付。本质是构建“人+AI+系统”的高效协同范式。
213 4