Introducció

RecyclerView és un dels components més potents i flexibles per mostrar llistes de dades en Android. És una versió millorada de ListView i GridView, oferint més control sobre la disposició dels elements i una millor gestió del rendiment.

Objectius

En aquesta secció, aprendràs a:

  • Comprendre la funcionalitat bàsica de RecyclerView.
  • Configurar un RecyclerView en un projecte Android.
  • Crear un Adapter per gestionar les dades.
  • Utilitzar un LayoutManager per definir la disposició dels elements.
  • Implementar un ViewHolder per optimitzar el rendiment.

Components Clau de RecyclerView

  1. RecyclerView: El contenidor principal que gestiona la visualització dels elements.
  2. Adapter: Gestiona les dades i crea les vistes per a cada element.
  3. ViewHolder: Conté les vistes per a cada element i les reutilitza per millorar el rendiment.
  4. LayoutManager: Defineix com es disposen els elements (lineal, en quadrícula, etc.).

Configuració de RecyclerView

Pas 1: Afegir RecyclerView al Layout

Primer, afegeix un RecyclerView al teu fitxer de disseny XML.

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

Pas 2: Crear el Layout per als Elements

Crea un fitxer XML per definir el disseny de cada element de la llista. Per exemple, item_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Element de la llista"/>
</LinearLayout>

Pas 3: Crear el ViewHolder

El ViewHolder conté les vistes per a cada element i les reutilitza per millorar el rendiment.

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView textView;

    public MyViewHolder(View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.textView);
    }
}

Pas 4: Crear l'Adapter

L'Adapter gestiona les dades i crea les vistes per a cada element.

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    private List<String> dataList;

    public MyAdapter(List<String> dataList) {
        this.dataList = dataList;
    }

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

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        String data = dataList.get(position);
        holder.textView.setText(data);
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }
}

Pas 5: Configurar el RecyclerView en l'Activitat

Finalment, configura el RecyclerView en la teva activitat.

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private MyAdapter adapter;
    private List<String> dataList;

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

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        dataList = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            dataList.add("Element " + i);
        }

        adapter = new MyAdapter(dataList);
        recyclerView.setAdapter(adapter);
    }
}

Exercici Pràctic

Objectiu

Crea una aplicació que mostri una llista de noms utilitzant RecyclerView.

Passos

  1. Crea un nou projecte Android.
  2. Afegeix un RecyclerView al layout principal.
  3. Crea un layout per als elements de la llista.
  4. Implementa el ViewHolder, l'Adapter i configura el RecyclerView a l'activitat principal.

Solució

// MainActivity.java
public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private MyAdapter adapter;
    private List<String> nameList;

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

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        nameList = Arrays.asList("Anna", "Bernat", "Carla", "David", "Eva");

        adapter = new MyAdapter(nameList);
        recyclerView.setAdapter(adapter);
    }
}

// MyAdapter.java
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    private List<String> nameList;

    public MyAdapter(List<String> nameList) {
        this.nameList = nameList;
    }

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

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        String name = nameList.get(position);
        holder.textView.setText(name);
    }

    @Override
    public int getItemCount() {
        return nameList.size();
    }
}

// MyViewHolder.java
public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView textView;

    public MyViewHolder(View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.textView);
    }
}

Errors Comuns i Consells

  • Error: RecyclerView no mostra dades. Assegura't que l'Adapter estigui configurat correctament i que la llista de dades no estigui buida.
  • Error: NullPointerException en findViewById. Verifica que els IDs de les vistes coincideixin amb els definits en els fitxers XML.
  • Consell: Utilitza DiffUtil per actualitzar eficientment les dades en RecyclerView.

Conclusió

RecyclerView és una eina poderosa per mostrar llistes de dades en Android. Amb una comprensió clara dels components clau i una configuració adequada, pots crear llistes eficients i personalitzades per a les teves aplicacions. Practica amb diferents tipus de LayoutManagers i Adapters per dominar completament aquesta eina.

© Copyright 2024. Tots els drets reservats