Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
android_listview [2023/10/16 14:49] enric_mieza_sanchez |
android_listview [2025/10/27 15:25] (actual) enric_mieza_sanchez |
||
|---|---|---|---|
| Línia 6: | Línia 6: | ||
| * '' | * '' | ||
| * Es manté per //backward compatibility// | * Es manté per //backward compatibility// | ||
| - | * Substitut | + | * //Widget// recomanat |
| Referències: | Referències: | ||
| - | * Article [[Android]] | + | * Article [[Android]] |
| + | * [[Android RecyclerView]] en aquesta wiki. | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| - | {{tag> #Dam #DamMp08 #DamMp08Uf1 # | + | {{tag> #Dam #DamMp08 #DamMp08Uf1 # |
| ==== Perquè és complicada una ListView? ==== | ==== Perquè és complicada una ListView? ==== | ||
| Línia 43: | Línia 44: | ||
| \\ | \\ | ||
| - | ===== Exemple ArrayList simplificat ===== | + | ==== Codi taula de rècords |
| - | * Referència: [[https:// | + | <WRAP info> |
| - | * Exemple d'una taula de rècords amb nom del jugador i intents. | + | Fixeu-vos en què: |
| - | * Utilitza un '' | + | * Hi ha els 3 elements: records (model) <-> adapter (ArrayAdapter) <-> listView |
| - | * No creem una classe derivada | + | * L''' |
| + | * Dintre | ||
| + | </ | ||
| - | ==== Codi taula de rècords ==== | + | <tabbox Kotlin> |
| - | <file java> | + | |
| - | package com.example.listilla; | + | |
| - | import android.os.Bundle; | + | <file kotlin MainActivity.kt> |
| - | import android.view.View; | + | class MainActivity : AppCompatActivity() { |
| - | import android.view.ViewGroup; | + | // Model: ArrayList de Record (intents=puntuació, |
| - | import android.widget.*; | + | class Record(var intents: Int, var nom: String) |
| + | var records: ArrayList< | ||
| - | import androidx.appcompat.app.AppCompatActivity; | + | // ArrayAdapter serà l' |
| + | lateinit var adapter: ArrayAdapter< | ||
| + | |||
| + | override fun onCreate(savedInstanceState: | ||
| + | super.onCreate(savedInstanceState) | ||
| + | enableEdgeToEdge() | ||
| + | setContentView(R.layout.activity_main) | ||
| + | ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> | ||
| + | val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) | ||
| + | v.setPadding(systemBars.left, | ||
| + | insets | ||
| + | } | ||
| + | |||
| + | // Afegim alguns exemples | ||
| + | records.add(Record(33, | ||
| + | records.add(Record(12, | ||
| + | records.add(Record(42, | ||
| + | |||
| + | // Inicialitzem l' | ||
| + | adapter = object : ArrayAdapter< | ||
| + | { | ||
| + | | ||
| + | // getView ens construeix el layout i hi " | ||
| + | var convertView = convertView | ||
| + | if (convertView == null) { | ||
| + | // inicialitzem l' | ||
| + | convertView = getLayoutInflater().inflate(R.layout.list_item, | ||
| + | } | ||
| + | // pintem imatge | ||
| + | val bitmap = BitmapFactory.decodeStream( assets.open(" | ||
| + | convertView.findViewById< | ||
| + | // " | ||
| + | convertView.findViewById< | ||
| + | convertView.findViewById< | ||
| + | return convertView | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // busquem la ListView i li endollem l' | ||
| + | val lv = findViewById< | ||
| + | lv.setAdapter(adapter) | ||
| + | |||
| + | } | ||
| + | } | ||
| + | </ | ||
| - | import java.util.ArrayList; | + | <tabbox Java> |
| + | <file java MainActivity.java> | ||
| public class MainActivity extends AppCompatActivity { | public class MainActivity extends AppCompatActivity { | ||
| Línia 132: | Línia 179: | ||
| </ | </ | ||
| + | </ | ||
| ===== Exercicis ===== | ===== Exercicis ===== | ||
| Línia 145: | Línia 192: | ||
| * Crea un nou //layout// amb el nom '' | * Crea un nou //layout// amb el nom '' | ||
| * Transforma el seu layout per defecte a LinearLayout. | * Transforma el seu layout per defecte a LinearLayout. | ||
| - | * Afegiex 2 '' | + | * Afegiex |
| - | * Afegeix un botó al '' | + | * Afegeix un botó al // |
| </ | </ | ||
| Línia 152: | Línia 199: | ||
| ==== Exercici 2 ==== | ==== Exercici 2 ==== | ||
| <WRAP todo> | <WRAP todo> | ||
| - | Randomitza la generació d'entrades a la taula, generant nº d'intents variats i noms i cognoms mesclant-los de dues llistes d'uns 15 o 20 elements. | + | Afegeix un botó **Afegir rècord** que ens ofereixi un '' |
| </ | </ | ||
| Línia 158: | Línia 205: | ||
| ==== Exercici 3 ==== | ==== Exercici 3 ==== | ||
| <WRAP todo> | <WRAP todo> | ||
| - | Afegeix una imatge als elements de la llista (imatge fixa). | + | Afegeix una imatge als elements de la llista (imatge fixa): |
| + | |||
| + | {{ android: | ||
| + | |||
| + | Solució 1: | ||
| + | * Afegeix una '' | ||
| + | * Arranja el //layout// perquè quedi com a la imatge anterior aproximadament. | ||
| + | * Afegeix la carpeta '' | ||
| + | * Afegeix una foto arrossegant-la sobre la vista de projecte d' | ||
| + | * La podràs fer servir amb el codi de l' | ||
| + | val bitmap = BitmapFactory.decodeStream( assets.open(" | ||
| + | convertView.findViewById< | ||
| + | </ | ||
| + | |||
| + | Solució 2: | ||
| * Ves a la view de projecte de l' | * Ves a la view de projecte de l' | ||
| * Importar una imatge arrossegant-la dins de '' | * Importar una imatge arrossegant-la dins de '' | ||
| Línia 166: | Línia 227: | ||
| * Afegeix diverses imatges als // | * Afegeix diverses imatges als // | ||
| - | {{ android: | ||
| </ | </ | ||