Cómo crear un RecyclerView en Android

Tiempo de lectura: 3 minutos

Hola a todos, esta vez os quiero enseñar cómo crear un RecyclerView en Android.

Lista creada con RecyclerView

Un RecyclerView nos permite crear una interfaz de lista de forma eficiente en Android. Este objeto es capaz de construir una vista compuesta de varios elementos dada una lista de entrada o Array. Además, realiza una gestión inteligente de la memoria, manteniendo solo aquellos elementos que se muestran en pantalla y reciclando los qué no se muestran.

Un RecyclerView está formado por:

  • Un Activity dónde mostramos el RecycerView.
  • Un Manejador de RecycerView.
  • Un ViewHolder qué asigna el XML o Layout al RecyclerView.
  • Un Layout qué representa la vista de un elemento (row) del RecyclerView

Vamos a comenzar creando el Activity con el layout qué contiene nuestro RecyclerView, lo llamamos RecyclerActivity:

public class RecyclerActivity extends AppCompatActivity {

 private RecyclerView recyclerView;


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recycler_activity);

        recyclerView = findViewById(R.id.recyclerView);
 }
 
}

En este código hemos creado y asignado el atributo recyclerView de tipo RecyclerView.

Ahora vamos a crear la vista que contiene el RecyclerView la llamamos recycler_activity.xml.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

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

</RelativeLayout>

Hemos creado un RecyclerView cuyo id es: recyclerView. Además, hemos puesto qué ocupe toda la pantalla con los atributos:

android:layout_width="match_parent"
android:layout_height="match_parent"

Una vez creado el Activity dónde mostraremos nuestra lista, hay que crear los elementos que manejan el RecyclerView.

Primero creamos el Layout que representa una fila de la lista, lo llamamos recycler_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/capa_row"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:orientation="horizontal">
                       
   <TextView
     android:id="@+id/textoElementoLista"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_gravity="center"/>

</RelativeLayout>
  

Hemos creado este layout con un TextView dentro dónde vamos a rellenar el nombre del elemento de nuestra lista.

Ahora vamos a crear una clase Java qué sirve de ViewHolder, lo llamaremos RecyclerViewHolder.class

//View holder para manejar la vista:
public class RecyclerViewHolder extends RecyclerView.ViewHolder {

    public TextView textoElementoLista;

    public RecyclerViewHolder(View itemView) {
        super(itemView);
            textoElementoLista= itemView.findViewById(R.id.textoElementoLista);
    }
}

La clase que hemos creado extiende de RecycerView.ViewHolder y sirve para asignar los elementos del Layout qué representa una fila de la lista.

Contiene un constructor RecyclerViewHolder dónde recibe un View (dónde estará el layout que hemos creado).

Para asignar la variable al elemento de la vista ponemos itemView.findViewById(

Además, las variables qué queramos utilizar siempre tienen que ser public.

Una vez creado el ViewHolder tenemos que crear el Manejador de RecyclerView para ello creamos una nueva clase que llamamos ManejardorRecyclerView.class

public class ManejardorRecyclerView extends RecyclerView.Adapter<RecyclerViewHolder> {

  
    private List<String> lista;
  
    public RecyclerViewForo(List<String> lista) {
        this.lista= lista;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent) {
       View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_row, parent, false);
        return new RecyclerViewHolder (itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewHolder holder, final int position) {
        final String elementoActual = lista.get(position);
        holder.textoElementoLista.setText(elementoActual);
    }

    @Override
    public int getItemCount() {
        if (lista != null) {
            return lista.size();
        } else {
            return 0;
        }
    }

En el manejador qué hemos creado, primero realizamos un extends de RecyclerView.Adapter<RecyclerViewHolder> indicando el tipo RecyclerViewHolder de la clase ViewHolder qué hemos creado en el paso anterior.

Después pasamos por el constructor la lista qué contiene los elementos, qué queremos representar.

En el método onCreateViewHolder asignamos el Layout qué hemos creado para cada elemento de la lista del paso anterior recycler_row.xml:

   View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_row, parent, false);

Después tenemos el método onBindViewHolder qué se llama cuándo el elemento de la lista aparece por pantalla y se «dibuja» por la interfaz de Android en el dispositivo. En este método es dónde tenemos que crear y asignar los elementos gráficos asignados a la vista para poder beneficiarnos de la gestión de memoria que realiza RecyclerView. Aquí asignamos el String de la lista con el TextView de nuestro Layout con esta línea holder.textoElementoLista.setText(elementoActual); utilizamos holder. para referirnos al ViewHolder anterior.

Finalmente el método getItemCount() que sirve para devolver la posición de la lista actual.

Ahora solo hay que asignar todos las clases creadas dentro de la Activity con el siguiente código:

public class RecyclerActivity extends AppCompatActivity {

 private RecyclerView recyclerView;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recycler_activity);

       recyclerView = findViewById(R.id.recyclerView);

       //Lista de ejemplo
       List<String> lista = new ArrayList<>();
       lista.add("Prueba 1");
       lista.add("Prueba 2");
       lista.add("Prueba 3");

       //Asignamos el adapter al RecyclerView
       ManejardorRecyclerView adapter = new ManejardorRecyclerView(lista);
       RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
       recyclerView.setLayoutManager(mLayoutManager);
       recyclerView.setItemAnimator(new DefaultItemAnimator());
       recyclerView.setAdapter(adapter);
 }
 
}

Primero creamos una lista tipo String de ejemplo

  List<String> lista = new ArrayList<>();
   lista.add("Prueba 1");
   lista.add("Prueba 2");
   lista.add("Prueba 3");

Después creamos el ManejardorRecyclerView

ManejardorRecyclerView adapter = new ManejardorRecyclerView(lista);

Y asignamos al RecyclerView el adaptador:

RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);

Y aquí termina el tutorial de hoy de cómo crear un RecyclerView en Android para mostrar nuestras listas.

2 comentarios en «Cómo crear un RecyclerView en Android»

Deja un comentario