Kotlin 中的 Android RecyclerView
在本文中,您将了解如何使用Kotlin在 Android 中实现RecyclerView 。在继续之前让我们了解 RecyclerView。 RecyclerView 是 ListView 的高级版本,具有改进的性能。当您要显示的项目列表很长时,您可以使用 RecyclerView。它能够重用其视图。在 RecyclerView 中,当View离开屏幕或对用户不可见时,它不会销毁它,它将重用这些视图。此功能有助于降低功耗并提高对应用程序的响应速度。现在让我们看看如何使用 Kotlin 实现 RecyclerView。
分步实施
第 1 步:创建一个新项目
在 Android Studio 的欢迎屏幕上,点击Create New Project 。如果您已经打开了一个项目,请转到文件 > 新建 > 新建项目。然后 选择一个 Project Template 窗口,选择Empty Activity并单击Next 。在名称字段中输入您的应用程序名称。从语言下拉菜单中选择Kotlin 。
第 2 步:添加依赖项
转到app < Gradle Scripts < gradle.build(Module: app ) 并添加以下依赖项。
dependencies{
// for adding recyclerview
implementation 'androidx.recyclerview:recyclerview:1.2.0'
// for adding cardview
implementation 'androidx.cardview:cardview:1.0.0'
}
第 3 步:转到 activity_main.xml 并添加以下代码
将 RecyclerView 添加到activity_main.xml您可以从设计部分的拖放中添加它,也可以通过编写 RecyclerView 的一些初始字符手动添加它,然后 IDE 将为您提供 RecyclerView 的建议,然后选择 RecyclerView 它会自动将其添加到你的布局文件。
XML
XML
Kotlin
data class ItemsViewModel(val image: Int, val text: String) {
}
Kotlin
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class CustomAdapter(private val mList: List) : RecyclerView.Adapter() {
// create new views
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
// inflates the card_view_design view
// that is used to hold list item
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.card_view_design, parent, false)
return ViewHolder(view)
}
// binds the list items to a view
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val ItemsViewModel = mList[position]
// sets the image to the imageview from our itemHolder class
holder.imageView.setImageResource(ItemsViewModel.image)
// sets the text to the textview from our itemHolder class
holder.textView.text = ItemsViewModel.text
}
// return the number of the items in the list
override fun getItemCount(): Int {
return mList.size
}
// Holds the views for adding it to image and text
class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView) {
val imageView: ImageView = itemView.findViewById(R.id.imageview)
val textView: TextView = itemView.findViewById(R.id.textView)
}
}
Kotlin
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)
// getting the recyclerview by its id
val recyclerview = findViewById(R.id.recyclerview)
// this creates a vertical layout Manager
recyclerview.layoutManager = LinearLayoutManager(this)
// ArrayList of class ItemsViewModel
val data = ArrayList()
// This loop will create 20 Views containing
// the image with the count of view
for (i in 1..20) {
data.add(ItemsViewModel(R.drawable.ic_baseline_folder_24, "Item " + i))
}
// This will pass the ArrayList to our Adapter
val adapter = CustomAdapter(data)
// Setting the Adapter with the recyclerview
recyclerview.adapter = adapter
}
}
步骤 4:创建新的布局资源文件
现在创建一个新的布局资源文件,用于设计我们的CardView布局。转到app > res > layout > 右键单击 layout > New > Layout Resource File并将该文件命名为card_view_design并添加下面提供的代码。在此文件中,您可以设计布局以将其显示到 RecyclerView 中。
XML
第 5 步:创建一个新的 Kotlin 类
转到app > Java > 包名称 > 右键单击 > 新建 > Kotlin 类/文件,然后从列表中选择数据类。将该文件命名为ItemsViewModel ,然后单击“确定”。该文件将保存您要在 RecyclerView 中显示的每个项目的信息。
科特林
data class ItemsViewModel(val image: Int, val text: String) {
}
步骤 6:创建适配器类
转到app > Java > package name > right-click > New > Kotlin class/file并将该文件命名为CustomAdapter然后单击OK 。在此之后添加下面提供的代码。代码中添加了注释以更详细地理解代码。
此类包含一些与 RecyclerView 一起使用的重要功能,如下所示:
- onCreateViewHolder():此函数设置视图以显示项目。
- onBindViewHolder():该函数用于将列表项绑定到我们的小部件,例如 TextView、ImageView 等。
- getItemCount():它返回列表中存在的项目数。
科特林
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class CustomAdapter(private val mList: List) : RecyclerView.Adapter() {
// create new views
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
// inflates the card_view_design view
// that is used to hold list item
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.card_view_design, parent, false)
return ViewHolder(view)
}
// binds the list items to a view
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val ItemsViewModel = mList[position]
// sets the image to the imageview from our itemHolder class
holder.imageView.setImageResource(ItemsViewModel.image)
// sets the text to the textview from our itemHolder class
holder.textView.text = ItemsViewModel.text
}
// return the number of the items in the list
override fun getItemCount(): Int {
return mList.size
}
// Holds the views for adding it to image and text
class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView) {
val imageView: ImageView = itemView.findViewById(R.id.imageview)
val textView: TextView = itemView.findViewById(R.id.textView)
}
}
第 7 步:使用 MainActivity.kt
转到MainActivity.kt文件并参考以下代码。下面是 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)
// getting the recyclerview by its id
val recyclerview = findViewById(R.id.recyclerview)
// this creates a vertical layout Manager
recyclerview.layoutManager = LinearLayoutManager(this)
// ArrayList of class ItemsViewModel
val data = ArrayList()
// This loop will create 20 Views containing
// the image with the count of view
for (i in 1..20) {
data.add(ItemsViewModel(R.drawable.ic_baseline_folder_24, "Item " + i))
}
// This will pass the ArrayList to our Adapter
val adapter = CustomAdapter(data)
// Setting the Adapter with the recyclerview
recyclerview.adapter = adapter
}
}
输出: