10.02. Kotlin- RecyclerView sencillo (solo un texto)

Se construye un RecyclerView a partir de la información de una lista de cadenas.

En la pantalla se pone la View del recyclerview y también se tiene que crear la activity que se va a repetir en la lista

activity_main.xml

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Clientes"
        android:textSize="30dp"
        android:layout_gravity="center"/>

    <androidx.appcompat.widget.SearchView
        android:id="@+id/svBuscador"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:iconifiedByDefault="false"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvClientes"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

activity_item_client.xml

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

    <TextView
        android:id="@+id/tvNombre"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:padding="10dp"
        android:text="Prueba"
        android:textColor="@color/white"
        android:background="@color/black"/>
</LinearLayout>

Se crea el adaptador que será el encargado de mandar a la view todos los elementos de activity_item_client

ClientAdapter.kt

package com.javi.u10c

import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class ClientAdapter: RecyclerView.Adapter<ClientAdapter.ViewHolder>() {

    private var clientList: List<String> = emptyList() //Lista de información a visualizar

    fun setData(clients: List<String>){ //Función que se llama desde MainActivity donde se manda los datos
        clientList=clients
        notifyDataSetChanged()
    }

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

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

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        var client = clientList[position]
        holder.bind(client) //por cada elemento, llama a la función que lo construye
    }

    class ViewHolder(view: View): RecyclerView.ViewHolder(view) { 
        val tvNombre=view.findViewById<TextView>(R.id.tvNombre)
        fun bind(client: String){ //construye cada elemento
            tvNombre.text=client
        }

    }
}

En el MainActivity.kt se crea el adaptador, se dice el aspecto de ese adaptador y se asocia al RecyclerView.

Por último, se mandan los datos que se tiene que visualizar

package com.javi.u10c

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
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)

    var rvClientes = findViewById<RecyclerView>(R.id.rvClientes)
    var adapter = ClientAdapter()

    rvClientes.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
    rvClientes.adapter = adapter

    var listaClientes: List<String> = listOf("Uno", "Dos", "Tres", "Cuatro")
    adapter.setData(listaClientes)


}

Related Posts