Afegir i eliminar ítems al RecyclerView¶
1. Afegir un ítem¶
Per afegir un element nou a la llista i que es mostri al RecyclerView:
1 2 3 4 5 6 7 8 9 10 | |
Explicació¶
DataSource.items.add(nouItem)→ afegeix l'element al final de la llista.notifyItemInserted(posició)→ indica al RecyclerView que s'ha afegit un element a la posició indicada. Això permet que el RecyclerView faci l'animació d'inserció.
Afegir en una posició concreta¶
1 2 3 4 5 | |
2. Eliminar un ítem¶
Per eliminar un element de la llista:
1 2 3 4 5 6 7 8 9 10 | |
Eliminar per objecte¶
Si tenim la referència a l'objecte que volem eliminar:
1 2 3 4 5 6 7 8 9 | |
3. Exemple complet a l'Activity¶
Exemple d'una Activity amb dos botons: un per afegir i un per eliminar l'últim element.
Layout (activity_main.xml)¶
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp">
<Button
android:id="@+id/btnAfegir"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Afegir" />
<Button
android:id="@+id/btnEliminar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Eliminar últim" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
Activity (MainActivity.kt)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
5. Mètodes de notificació de l'Adapter¶
El RecyclerView.Adapter proporciona diversos mètodes per notificar canvis:
| Mètode | Ús |
|---|---|
notifyItemInserted(position) |
S'ha afegit un element a la posició |
notifyItemRemoved(position) |
S'ha eliminat l'element de la posició |
notifyItemChanged(position) |
L'element a la posició s'ha modificat |
notifyDataSetChanged() |
Tota la llista ha canviat (menys eficient) |
Recomanació: Utilitzeu els mètodes específics (notifyItemInserted, notifyItemRemoved) en lloc de notifyDataSetChanged(), ja que permeten animacions i són més eficients.
6. Resum¶
- Després de modificar la llista, sempre notificar l'adapter.
- Utilitzar el mètode de notificació adequat per obtenir animacions.
- Adaptar el codi en cas que s'estigui utlitzant ViewModel.