Hola a todos, esta vez os quiero enseñar cómo crear un RecyclerView en Android.
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.
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.
2 comentarios en «Cómo crear un RecyclerView en Android»