RecyclerView es un componente de la interfaz de usuario en Android que permite mostrar grandes conjuntos de datos de manera eficiente. Es una versión más avanzada y flexible de ListView. En esta lección, aprenderemos cómo configurar y utilizar RecyclerView en una aplicación Android.

Contenidos

  1. ¿Qué es RecyclerView?
  2. Configuración de RecyclerView en tu proyecto
  3. Creación del layout para los ítems
  4. Implementación del Adapter
  5. Configuración del LayoutManager
  6. Ejemplo práctico
  7. Ejercicio práctico
  8. Conclusión

  1. ¿Qué es RecyclerView?

RecyclerView es un widget de la biblioteca de soporte de Android que se utiliza para mostrar grandes conjuntos de datos de manera eficiente. Proporciona:

  • Reutilización de vistas: Recicla las vistas de los ítems que ya no son visibles para mejorar el rendimiento.
  • Flexibilidad en el diseño: Permite usar diferentes tipos de LayoutManagers para organizar los ítems.
  • Animaciones: Soporta animaciones para añadir, eliminar y mover ítems.

  1. Configuración de RecyclerView en tu proyecto

Para usar RecyclerView, primero debes agregar la dependencia en tu archivo build.gradle:

dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.2.1'
}

  1. Creación del layout para los ítems

Crea un archivo XML para definir el diseño de cada ítem en la lista. Por ejemplo, item_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@android:color/black" />

    <TextView
        android:id="@+id/item_subtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray" />
</LinearLayout>

  1. Implementación del Adapter

El Adapter es responsable de crear las vistas para los ítems y vincular los datos a estas vistas. Aquí hay un ejemplo de un Adapter básico:

class MyAdapter(private val itemList: List<MyItem>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val title: TextView = itemView.findViewById(R.id.item_title)
        val subtitle: TextView = itemView.findViewById(R.id.item_subtitle)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
        return MyViewHolder(view)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val item = itemList[position]
        holder.title.text = item.title
        holder.subtitle.text = item.subtitle
    }

    override fun getItemCount(): Int {
        return itemList.size
    }
}

  1. Configuración del LayoutManager

El LayoutManager es responsable de organizar los ítems en RecyclerView. Los más comunes son LinearLayoutManager y GridLayoutManager.

val recyclerView: RecyclerView = findViewById(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = MyAdapter(myItemList)

  1. Ejemplo práctico

Vamos a crear una aplicación simple que muestre una lista de elementos usando RecyclerView.

Paso 1: Crear el layout principal

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

    <RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

Paso 2: Crear la clase de datos

data class MyItem(val title: String, val subtitle: String)

Paso 3: Configurar RecyclerView en la actividad

class MainActivity : AppCompatActivity() {

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

        val recyclerView: RecyclerView = findViewById(R.id.recycler_view)
        recyclerView.layoutManager = LinearLayoutManager(this)

        val itemList = listOf(
            MyItem("Title 1", "Subtitle 1"),
            MyItem("Title 2", "Subtitle 2"),
            MyItem("Title 3", "Subtitle 3")
        )

        recyclerView.adapter = MyAdapter(itemList)
    }
}

  1. Ejercicio práctico

Ejercicio

Crea una aplicación que muestre una lista de contactos con nombre y número de teléfono usando RecyclerView. Cada ítem debe tener un botón que permita eliminar el contacto de la lista.

Solución

  1. Crear el layout para los ítems (contact_item.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="16dp">
    
        <TextView
            android:id="@+id/contact_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="18sp"
            android:textColor="@android:color/black" />
    
        <TextView
            android:id="@+id/contact_number"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="14sp"
            android:textColor="@android:color/darker_gray" />
    
        <Button
            android:id="@+id/delete_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Delete" />
    </LinearLayout>
    
  2. Crear la clase de datos (Contact.kt):

    data class Contact(val name: String, val number: String)
    
  3. Implementar el Adapter (ContactAdapter.kt):

    class ContactAdapter(private val contactList: MutableList<Contact>) : RecyclerView.Adapter<ContactAdapter.ContactViewHolder>() {
    
        class ContactViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            val name: TextView = itemView.findViewById(R.id.contact_name)
            val number: TextView = itemView.findViewById(R.id.contact_number)
            val deleteButton: Button = itemView.findViewById(R.id.delete_button)
        }
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactViewHolder {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.contact_item, parent, false)
            return ContactViewHolder(view)
        }
    
        override fun onBindViewHolder(holder: ContactViewHolder, position: Int) {
            val contact = contactList[position]
            holder.name.text = contact.name
            holder.number.text = contact.number
            holder.deleteButton.setOnClickListener {
                contactList.removeAt(position)
                notifyItemRemoved(position)
                notifyItemRangeChanged(position, contactList.size)
            }
        }
    
        override fun getItemCount(): Int {
            return contactList.size
        }
    }
    
  4. Configurar RecyclerView en la actividad (MainActivity.kt):

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            val recyclerView: RecyclerView = findViewById(R.id.recycler_view)
            recyclerView.layoutManager = LinearLayoutManager(this)
    
            val contactList = mutableListOf(
                Contact("John Doe", "123-456-7890"),
                Contact("Jane Smith", "098-765-4321"),
                Contact("Sam Wilson", "555-555-5555")
            )
    
            recyclerView.adapter = ContactAdapter(contactList)
        }
    }
    

  1. Conclusión

En esta lección, hemos aprendido cómo usar RecyclerView para mostrar listas de datos de manera eficiente en una aplicación Android. Hemos cubierto la configuración básica, la creación de layouts para los ítems, la implementación del Adapter y la configuración del LayoutManager. Además, hemos realizado un ejercicio práctico para reforzar los conceptos aprendidos.

RecyclerView es una herramienta poderosa y flexible que te permitirá crear interfaces de usuario complejas y eficientes en tus aplicaciones Android. En el próximo módulo, exploraremos más componentes y técnicas avanzadas para mejorar aún más tus habilidades de desarrollo en Android.

© Copyright 2024. Todos los derechos reservados