📌  相关文章
📜  Kotlin 中的 Android RecyclerView

📅  最后修改于: 2022-05-13 01:55:49.003000             🧑  作者: Mango

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
  
    }
}

输出:

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!