3、第一个 RecyclerView:在 XML 布局中声明 RecyclerView,在 Activity 中绑定。

好,咱们正式开始动手了。

这一节,我会带你写出你的第一个 RecyclerView。说白了,就是三步:

  1. 在 XML 布局里放一个 RecyclerView 控件
  2. 在 Activity 里找到它(绑定)
  3. 给它设置 LayoutManager,让它能滚动起来

别小看这三步。我见过不少新手,RecyclerView 写不出来,最后发现是 XML 里忘了加 android:layout_height。嗯,这种坑我踩过,所以咱们一步步来。

3.1 在 XML 布局中声明 RecyclerView

首先,打开你的 activity_main.xml。如果你用的是 Android Studio 默认模板,里面应该有个 TextView 写着 "Hello World!"。删掉它,换成 RecyclerView。

我个人习惯把 RecyclerView 放在根布局里,直接占满全屏。当然,你也可以放在任何容器里,比如 LinearLayout 或 ConstraintLayout。但有一点要注意:RecyclerView 必须有一个确定的宽高,否则它不会显示任何内容。

核心要点:RecyclerView 的宽高不能是 wrap_content,除非你明确知道自己在做什么。否则,用 match_parent 或固定 dp 值。

来看代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

这里我用了 androidx.recyclerview.widget.RecyclerView,注意是完整包名。为什么?因为 RecyclerView 是 AndroidX 库里的控件,不是系统内置的。如果你用的是旧版 support 库,包名会不一样。但我建议你直接用 AndroidX,毕竟现在新项目都默认用这个。

小提示:如果你在 XML 里输入 RecyclerView 没有自动补全,说明你的 build.gradle 里还没添加依赖。去 app 模块的 build.gradle 里加上:

implementation 'androidx.recyclerview:recyclerview:1.3.2'

然后 Sync 一下项目。

3.2 在 Activity 中绑定 RecyclerView

XML 写好了,接下来去 MainActivity.kt 里绑定它。

绑定方式有两种:

  • 传统方式:findViewById
  • 现代方式:用 View Binding 或 Data Binding

我个人推荐 View Binding,因为它类型安全,而且能避免空指针。不过这一节咱们先用 findViewById,因为最直观,也最容易理解。

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

        // 绑定 RecyclerView
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)

        // 设置 LayoutManager
        recyclerView.layoutManager = LinearLayoutManager(this)
    }
}

看到没?就这几行代码。但这里有个关键点:LayoutManager

RecyclerView 本身不知道该怎么摆放列表项。你得告诉它:是垂直滚动?水平滚动?还是网格?这个「告诉」的动作,就是通过 LayoutManager 完成的。

我刚开始学 RecyclerView 时,忘了设置 LayoutManager,结果列表一片空白。当时我还以为是数据的问题,查了半天……后来才发现,RecyclerView 没有 LayoutManager 就不会显示任何子 View。这个坑,你记住就好。

注意:不设置 LayoutManager 的 RecyclerView,就像没有方向盘的汽车——它动不了。运行时不会报错,但列表就是空的。

3.3 LayoutManager 的三种常用类型

咱们常用的 LayoutManager 有三种,我整理了一张表:

类型 类名 适用场景
线性布局 LinearLayoutManager 垂直或水平列表,比如通讯录、设置页
网格布局 GridLayoutManager 网格展示,比如相册、商品列表
瀑布流布局 StaggeredGridLayoutManager 高度不固定的网格,比如 Pinterest 风格

这一节咱们先用 LinearLayoutManager,垂直方向。后面章节会逐一讲解其他类型。

3.4 核心逻辑流程图

为了让你更直观地理解 RecyclerView 的初始化流程,我画了一张图:

RecyclerView 初始化流程 1. XML 声明 RecyclerView 在布局文件中添加控件 2. Activity 中绑定 findViewById 获取实例 3. 设置 LayoutManager 决定列表布局方式 LayoutManager 类型选择 LinearLayoutManager | GridLayoutManager | StaggeredGridLayoutManager ✅ RecyclerView 准备就绪 等待 Adapter 提供数据

你看,流程其实很简单。但很多初学者会卡在「设置 LayoutManager」这一步。为什么?因为 RecyclerView 不像 ListView 那样默认就有垂直滚动。它把布局策略完全交给了开发者,这给了你极大的灵活性,但也意味着你必须显式地配置它。

3.5 完整代码示例

最后,咱们把这一节的内容串起来,写一个完整的 MainActivity.kt

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

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

        // 1. 绑定 RecyclerView
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)

        // 2. 设置 LayoutManager(垂直方向)
        recyclerView.layoutManager = LinearLayoutManager(this)

        // 3. 设置 Adapter(下一节会讲,先留空)
        // recyclerView.adapter = MyAdapter()
    }
}

注意,这里我注释掉了 Adapter 的设置。因为咱们还没写 Adapter 呢。下一节,我会带你写一个最简单的 Adapter,让列表真正显示数据。

个人经验:我在项目里经常用 LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) 来实现横向滚动列表,比如图片轮播。第三个参数 reverseLayout 控制是否反向滚动,一般设为 false 就行。

3.6 常见问题排查

如果你运行后屏幕一片空白,别慌。按这个顺序检查:

  • RecyclerView 的宽高:是不是 match_parent?有没有被其他布局遮挡?
  • LayoutManager 是否设置:没设置的话,RecyclerView 不会显示任何子 View。
  • 依赖是否添加:build.gradle 里有没有 implementation 'androidx.recyclerview:recyclerview:xxx'?
  • Activity 是否正确加载布局:setContentView 的布局文件是不是 activity_main?

我曾经在一个项目里,因为 XML 文件名写错了,导致 RecyclerView 一直没加载出来。查了半小时才发现是 setContentView(R.layout.activity_main) 里的 R 引用错了模块。嗯,这种低级错误,谁都会犯,关键是学会快速定位。

好了,这一节的内容就到这里。你已经学会了如何在 XML 里声明 RecyclerView,在 Activity 里绑定它,并设置 LayoutManager。下一节,咱们会写一个真正的 Adapter,让列表里出现文字。


公众号:蓝海资料掘金营,微信deep3321