第7天:列表和适配器(Kotlin)
·
内容概述
本章节学习内容的代码链接: 联系人列表ContactListApp
在这一节中,我们将学习如何使用 RecyclerView 来显示列表数据,并了解适配器的作用。RecyclerView 是一种灵活且高效的控件,适合用于展示大量数据。
1. RecyclerView 的介绍
- RecyclerView 是一种用于展示滚动列表的高级控件。
- 优点:
- 视图复用,减少内存使用。
- 支持多种布局管理器(如线性布局、网格布局等)。
- 提供更强大的自定义功能。
2. 创建项目
- 打开 Android Studio,选择 “新建项目”。
- 选择项目模板:
- 选择 “Empty Activity”。
- 配置项目:
- 项目名称:
ContactListApp - 包名:
com.example.contactlist - 语言选择:
Kotlin - 最小API级别:
API 21: Android 5.0 (Lollipop)
- 项目名称:
- 点击“完成”,等待项目生成。
3. 添加 RecyclerView 依赖
在 build.gradle(Module: app)中添加 RecyclerView 依赖:
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.3.0'
}
点击“Sync Now”同步依赖。
4. 更新布局文件
打开 activity_main.xml,添加 RecyclerView 控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
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"/>
</LinearLayout>
5. 创建数据模型
在 com.example.contactlist 包中创建一个数据模型类 Contact.kt:
data class Contact(val name: String)
6. 创建适配器
在同一包中创建 ContactAdapter.kt,实现适配器:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class ContactAdapter(private val contactList: List<Contact>) : RecyclerView.Adapter<ContactAdapter.ViewHolder>() {
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(android.R.id.text1)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(android.R.layout.simple_list_item_1, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = contactList[position].name
}
override fun getItemCount() = contactList.size
}
7. 在 MainActivity 中设置 RecyclerView
打开 MainActivity.kt,设置 RecyclerView:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
private lateinit var contactAdapter: ContactAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(this)
// 模拟数据
val contacts = listOf(
Contact("Alice"),
Contact("Bob"),
Contact("Charlie"),
Contact("David"),
Contact("Eve"),
Contact("Frank"),
Contact("Grace"),
Contact("Hannah"),
Contact("Ivan"),
Contact("Jack")
)
contactAdapter = ContactAdapter(contacts)
recyclerView.adapter = contactAdapter
}
}
8. 运行应用
- 点击“运行”按钮。
- 选择一个模拟器或连接的设备。
- 观察应用显示的联系人列表。
详细解释
-
RecyclerView:用于显示数据列表,通过适配器将数据和视图绑定。
-
ContactAdapter:
onCreateViewHolder:创建视图持有者,加载布局。onBindViewHolder:将数据绑定到视图上。getItemCount:返回数据项的数量。
-
模拟数据:在
MainActivity中创建一个包含联系人姓名的列表并传递给适配器。
我们实现了一个简单的联系人列表应用 (ContactListApp),它展示了一组联系人的名字。下面是如何实现这个功能的详细解释,包括各个代码之间的关系及实现原理。
实现原理
- 数据准备:在
MainActivity中,创建一个联系人列表contacts,包含多个Contact对象。 - 适配器设置:将
contacts列表传递给ContactAdapter实例,并设置为 RecyclerView 的适配器。 - 视图创建与绑定:
- 当 RecyclerView 显示时,会首先调用
onCreateViewHolder创建新视图。 - 随后调用
onBindViewHolder将联系人数据绑定到视图中。
- 当 RecyclerView 显示时,会首先调用
- 列表展示:最终,RecyclerView 将显示所有联系人的姓名,形成一个列表。
1. 数据模型 (Contact)
data class Contact(val name: String)
- 功能:这是一个数据类,用于表示单个联系人。它包含一个属性
name,表示联系人的名字。 - 关系:这个类在应用中用于创建联系人对象的列表,后续的适配器会使用这些对象来展示数据。
2. 适配器 (ContactAdapter)
class ContactAdapter(private val contactList: List<Contact>) : RecyclerView.Adapter<ContactAdapter.ViewHolder>() {
- 功能:适配器负责将
Contact数据模型与RecyclerView连接。它继承自RecyclerView.Adapter,需要实现三个主要方法。 - 关系:
contactList:通过构造函数传入的联系人列表,用于在适配器中访问和显示数据。- 适配器的工作是将
contactList中的数据转换为可以在 RecyclerView 中显示的视图。
3. ViewHolder (ViewHolder)
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(android.R.id.text1)
}
- 功能:
ViewHolder是一个内部类,用于缓存 RecyclerView 的每一项视图。它提高了性能,避免了重复查找视图。 - 关系:在适配器中,当创建一个新的视图时,会生成一个
ViewHolder实例并返回。这个持有者缓存了列表项的视图引用(textView)。
4. 创建视图 (onCreateViewHolder)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(android.R.layout.simple_list_item_1, parent, false)
return ViewHolder(view)
}
- 功能:当 RecyclerView 需要新项时,调用这个方法创建一个新的视图持有者。
- 关系:它加载了一个简单的列表项布局并将其传递给
ViewHolder,这样就可以在后续的绑定数据时使用。
5. 数据绑定 (onBindViewHolder)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = contactList[position].name
}
- 功能:此方法在 RecyclerView 中显示每个项目的数据。它会在需要更新视图时被调用。
- 关系:通过
position参数,可以获取联系人列表中相应位置的联系人对象,并将其姓名设置到textView上。
6. 获取项目数量 (getItemCount)
override fun getItemCount() = contactList.size
- 功能:返回联系人列表的大小,以告诉 RecyclerView 有多少项需要显示。
- 关系:这个方法与适配器的其他方法(如
onCreateViewHolder和onBindViewHolder)密切相关,确保 RecyclerView 知道何时创建新项以及何时绑定数据。
总结
通过本节的学习,你已经掌握了如何使用 RecyclerView 显示列表数据,并实现了一个简单的联系人列表应用。你可以在此基础上添加更多功能,例如点击事件、搜索功能等。
更多推荐


所有评论(0)