Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
}
}
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); } }
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
recyclerView de tipo RecyclerView.

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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>
<?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>
<?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"<br>android:layout_height="match_parent"
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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>
<?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>
<?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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//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);
}
}
//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); } }
//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(
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
}
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; } }
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>
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_row, parent, false);
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_row, parent, false);
   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);
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
}
}
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); } }
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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
List<String> lista = new ArrayList<>();
lista.add("Prueba 1");
lista.add("Prueba 2");
lista.add("Prueba 3");
List<String> lista = new ArrayList<>(); lista.add("Prueba 1"); lista.add("Prueba 2"); lista.add("Prueba 3");
  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);
ManejardorRecyclerView adapter = new ManejardorRecyclerView(lista);

Y asignamos al RecyclerView el adaptador:

RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);<br>recyclerView.setLayoutManager(mLayoutManager);<br>recyclerView.setItemAnimator(new DefaultItemAnimator());<br>recyclerView.setAdapter(adapter);
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.

0

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

Deja un comentario