Android RecyclerView en Kotlin

En este artículo, sabrá cómo implementar RecyclerView en Android usando Kotlin . Antes de continuar, infórmenos sobre RecyclerView. Un RecyclerView es una versión avanzada de ListView con un rendimiento mejorado. Cuando tenga una larga lista de elementos para mostrar, puede usar RecyclerView. Tiene la capacidad de reutilizar sus puntos de vista. En RecyclerView, cuando la Vista sale de la pantalla o no es visible para el usuario, no la destruirá, sino que reutilizará estas vistas. Esta característica ayuda a reducir el consumo de energía y proporciona una mayor capacidad de respuesta a la aplicación. Ahora veamos cómo implementar RecyclerView usando Kotlin.

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

En la pantalla de bienvenida de Android Studio, haga clic en Crear nuevo proyecto . Si ya tiene un proyecto abierto, vaya a Archivo > Nuevo > Nuevo proyecto. Luego, seleccione una ventana de Plantilla de proyecto, seleccione Actividad vacía y haga clic en Siguiente . Ingrese el nombre de su aplicación en el campo Nombre. Seleccione Kotlin en el menú desplegable Idioma.

Paso 2: agregue las dependencias

Vaya a app < ​​Gradle Scripts < gradle.build(Module: app ) y agregue las siguientes dependencias.

dependencies{
  // for adding recyclerview
  implementation 'androidx.recyclerview:recyclerview:1.2.0'
  
  // for adding cardview
  implementation 'androidx.cardview:cardview:1.0.0'
}

Paso 3: Vaya a activity_main.xml y agregue el siguiente código

Agregue RecyclerView a activity_main.xml , puede agregarlo arrastrando y soltando desde la sección de diseño o puede agregarlo manualmente escribiendo algunos caracteres iniciales de RecyclerView, luego el IDE le dará sugerencias para RecyclerView, luego seleccione RecyclerView y lo agregará automáticamente a su archivo de diseño.

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
  
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:itemCount="5"
        tools:listitem="@layout/card_view_design" />
      
</LinearLayout>

Paso 4: Cree un nuevo archivo de recursos de diseño

Ahora cree un nuevo archivo de recursos de diseño que se utilizará para diseñar nuestro diseño CardView . Vaya a aplicación > res > diseño > haga clic con el botón derecho en diseño > Nuevo > Archivo de recursos de diseño y nombre ese archivo como card_view_design y agregue el código que se proporciona a continuación. En este archivo, puede diseñar el diseño para mostrarlo en RecyclerView.

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_margin="10dp"
    app:cardElevation="6dp">
  
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dp">
  
        <ImageView
            android:id="@+id/imageview"
            android:layout_width="40dp"
            android:layout_height="40dp" />
  
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginLeft="15dp"
            android:text="Item"
            android:textSize="20sp"
            android:textStyle="bold" />
  
    </LinearLayout>
  
</androidx.cardview.widget.CardView>

Paso 5: crea una nueva clase de Kotlin

Vaya a aplicación > java > nombre del paquete > haga clic con el botón derecho en > Nuevo > clase/archivo de Kotlin y elija Clase de datos de la lista. Nombre ese archivo como ItemsViewModel y luego haga clic en Aceptar. Este archivo contendrá la información de cada elemento que desee mostrar en su RecyclerView.

Kotlin

data class ItemsViewModel(val image: Int, val text: String) {
}

Paso 6: Crear clase de adaptador 

Vaya a aplicación > java > nombre del paquete > haga clic con el botón derecho en > Nuevo > clase/archivo de Kotlin y nombre ese archivo como CustomAdapter y luego haga clic en Aceptar . Después de esto, agregue el código proporcionado a continuación. Se agregan comentarios dentro del código para comprender el código con más detalle.

Esta clase contiene algunas funciones importantes para trabajar con RecyclerView, estas son las siguientes:

  • onCreateViewHolder(): esta función configura las vistas para mostrar los elementos.
  • onBindViewHolder(): esta función se utiliza para vincular los elementos de la lista a nuestros widgets, como TextView, ImageView, etc.
  • getItemCount(): Devuelve el conteo de elementos presentes en la lista.

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<ItemsViewModel>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
  
    // 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)
    }
}

Paso 7: Trabajar con MainActivity.kt

Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt. Se agregan comentarios dentro del código para comprender el código con más detalle.

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<RecyclerView>(R.id.recyclerview)
  
        // this creates a vertical layout Manager
        recyclerview.layoutManager = LinearLayoutManager(this)
  
        // ArrayList of class ItemsViewModel
        val data = ArrayList<ItemsViewModel>()
  
        // 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
  
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por Pushpender007 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *