Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Següent revisió | Revisió prèvia | ||
|
android_recyclerview [2023/12/18 16:01] enric_mieza_sanchez creat |
android_recyclerview [2026/10/06 22:19] (actual) enric_mieza_sanchez [Implementar una RecyclerView] |
||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| ====== Android RecyclerView ====== | ====== Android RecyclerView ====== | ||
| - | '' | + | '' |
| Referències: | Referències: | ||
| Línia 8: | Línia 8: | ||
| * [[Android Camera]] | * [[Android Camera]] | ||
| * [[https:// | * [[https:// | ||
| + | * Un [[https:// | ||
| - | ===== Diagrames | + | {{tag> #Dam #DamMp08 #DamMp08Uf1 # |
| + | |||
| + | |||
| + | ===== Reciclatge d' | ||
| {{recycling-views.png? | {{recycling-views.png? | ||
| {{recycling-items.jpg? | {{recycling-items.jpg? | ||
| + | |||
| + | ===== MVC ampliat i Adapter ===== | ||
| + | |||
| + | {{ listview-adapter.jpg? | ||
| + | |||
| + | * Tota '' | ||
| + | * En altres entorns segurament trobaríem una connexió més simple: | ||
| + | * Model de dades (Ex. '' | ||
| + | * El codi de Controlador podria estar en altres objectes de l' | ||
| + | * En Android, degut a que necessitem la gestió del reciclatge dels ítems gràfics, ens **apareix un element extra anomenat '' | ||
| + | |||
| + | \\ | ||
| ===== Implementar una RecyclerView ===== | ===== Implementar una RecyclerView ===== | ||
| + | **Exemple: agenda de contactes** | ||
| + | |||
| + | Volem fer una aplicació d' | ||
| + | |||
| + | Seguirem les indicacions de la [[https:// | ||
| + | |||
| + | Haureu de crear els següents arxius o objectes: | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Us deixo algunes pistes per facilitar la implementació: | ||
| + | |||
| + | - Crear un //dataset// d' | ||
| + | * Per les dades podeu crear un array amb 10 noms i un altre amb 10 cognoms i que els vagi combinant aleatòriament entre ells amb un num de telèfon random entre 100000000 i 999999999. | ||
| + | * Crea al menys 40 contactes per comprovar el resultat de la visualització del '' | ||
| + | - Crear classes '' | ||
| + | - Creeu el codi del '' | ||
| + | - Insertar una RecyclerView al main tempate de l''' | ||
| + | - Eliminar '' | ||
| + | - Afegir un //layout// per als elements del '' | ||
| + | * Canvieu la '' | ||
| + | * Afegiu '' | ||
| + | - Posar-hi el codi del '' | ||
| + | - Adapteu el codi segons calgui. | ||
| + | |||
| + | Si no veieu elements de la llista al '' | ||
| + | - Que hagis posat un '' | ||
| + | - Que el '' | ||
| + | - Vigila que no tinguis elements gràfics dels diferents //layouts// amb un mateix ID, en particular el del '' | ||
| + | |||
| + | Un cop en funcionament, | ||
| + | - Millorant els '' | ||
| + | - Prova amb la '' | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Exercicis ===== | ||
| + | |||
| + | <WRAP todo> | ||
| + | **Mini Agenda** | ||
| + | |||
| + | Implementa una agenda de contactes com s'ha descrit mes amunt. | ||
| + | |||
| + | Afegeix un [[https:// | ||
| + | </ | ||
| + | |||
| + | <WRAP todo> | ||
| + | **Galeria d' | ||
| + | |||
| + | Implementa una aplicació de captació d' | ||
| + | |||
| + | Visualitza les imatges enregistrades en una nova '' | ||
| + | |||
| + | El '' | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Implementar onClick (amb funcions lambda) ===== | ||
| + | |||
| + | La implementació amb **funcions lambda** és més sofisticada, | ||
| + | |||
| + | Per implementar un onClick cal modificar: | ||
| + | * El '' | ||
| + | * La instanciació del '' | ||
| + | |||
| + | A l''' | ||
| + | |||
| + | <file kotlin CustomAdapter.kt> | ||
| + | class MyAdapter( | ||
| + | private val dataList: List< | ||
| + | private val onItemClick: | ||
| + | ) : RecyclerView.Adapter< | ||
| + | | ||
| + | override fun onBindViewHolder(holder: | ||
| + | holder.itemView.setOnClickListener { | ||
| + | onItemClick(position) | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | A la instanciació de l''' | ||
| + | <file kotlin MainActivity.kt> | ||
| + | val adapter = MyAdapter(dataList) { position -> | ||
| + | // Manejar el clic aquí | ||
| + | Toast.makeText(this, | ||
| + | } | ||
| + | </ | ||