Publicado en Android

Implementar RecyclerView en AndroidX


¿Qué es un RecyclerView?

La clase RecyclerView nos permite mostrar un listado de elementos. es una versión más avanzada de la clase ListView con un mayor rendimiento.

Su nombre indica parte del funcionamiento, los elementos de la lista se reciclan para otros, de esa forma se aumenta el rendimiento en mostrar datos variables y lista más largas.

Añadir dependencia para el RecyclerView

Para usar el RecyclerView en tus proyectos Android Studio es necesario añadir la siguiente dependencia en app.gradle. RecyclerView forma parte del JetPack de AndroidX

 implementation 'androidx.recyclerview:recyclerview:1.0.0'

Añadir el widget RecyclerView

Para mostrar la lista dinámica se usa el widget RecyclerView, su declaración en el layout.xml es la siguiente:

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

Creando un adaptador para controlar el RecyclerView

Se debe crear un adaptador para controlar el RecyclerView. El adaptador se constituye:

  • Constructor y métodos para gestionar la carga de datos, añadir, remover, editar, actualizar etc…
  • en onCreateViewHolder es donde cargará el layout para cada elemento de la lista
  • onBindViewHolder es donde se cargará los datos por elemento que se visualice en pantalla
  • la clase interna ViewHolder permite obtener las referencias de los componentes visuales (views) de cada elemento de la lista, es el encargado de reciclar la vista si es necesario.
  • Sobrescribir el método getItemCount para que devuelve el total de elementos de la lista

Si desea usar Kotlin consultar Implementado RecyclerView con Kotlin y AndroidX

public class MySimpleAdapter extends RecyclerView.Adapter<MySimpleAdapter.MyViewHolder> {

    private String[] mDataSet;

    public MySimpleAdapter(String[] mDataSet) {
        this.mDataSet = mDataSet;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        String data = mDataSet[position];
        holder.bindData(data);
    }

    @Override
    public int getItemCount() {
        return (mDataSet != null) ? mDataSet.length : 0;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private TextView text1;

        public MyViewHolder(@NonNull View v) {
            super(v);
            text1 = (TextView) v.findViewById(android.R.id.text1);
        }

        public void bindData(final String data) {
            text1.setText(data);
        }
    }
}

Configurar el RecyclerView

Antes de mostrar los datos al RecyclerView se debe especificar como serán mostrados, se puede visualizar en forma de lista, columnas, bloques o bloques adaptados. Y por últmo asignar el adaptador

//inicalizar el recyclerview
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view_list);

//Definiendo datos
final String[] topics = {"Attractions", "Dining", "Education","Health","Family","Office","Promotions","Radio","Food","Sports","Travel"};

//Crear adaptador
MySimpleAdapter adapter = new MySimpleAdapter(topics);

//Fijar el tamaño de los elementos
recyclerView.setHasFixedSize(true);

//Declarar la visualización de los elementos
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);

//Asignar el adaptador al recyclerview
recyclerView.setAdapter(adapter);