bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


android_spinner

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
Ultima revisió Ambdós costats nova versio
android_spinner [2022/10/17 15:56]
enrique_mieza_sanchez [A partir de dades pròpies]
android_spinner [2022/10/17 16:58]
enrique_mieza_sanchez [A partir de dades dinàmiques]
Línia 64: Línia 64:
 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
     R.array.nombres, android.R.layout.simple_spinner_item);     R.array.nombres, android.R.layout.simple_spinner_item);
-adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
 spinner.setAdapter(adapter); spinner.setAdapter(adapter);
 </file> </file>
Línia 78: Línia 77:
 ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,
     android.R.layout.simple_spinner_item, nombres);     android.R.layout.simple_spinner_item, nombres);
-adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
 spinner.setAdapter(adapter); spinner.setAdapter(adapter);
 </file> </file>
Línia 87: Línia 85:
 Per poder respondre a les accions de l'usuari al canviar els valors dels ''Spinner'' necessitarem implementar les //callback// pertinents. L'objecte que sol fer la feina és un ''Listener''. Per poder respondre a les accions de l'usuari al canviar els valors dels ''Spinner'' necessitarem implementar les //callback// pertinents. L'objecte que sol fer la feina és un ''Listener''.
  
-Tindrem 2 estratègies bàsiques per a implementar les //callback// d'un ''Spinner'' (o de qualsevol ''View'' amb acció: +Tindrem 2 estratègies bàsiques per a implementar les //callback// d'un ''Spinner'' (o de qualsevol ''View'' amb acció. Convé conèixer les dues, encara que recomanem la segona. 
-  Crear un objecte tipus ''OnItemSelectedListener'' per a cada Spinner, similarment a com solem fer amb els ''OnClickListener'' dels ''Button''+ 
-  - Heretar la interfície ''OnItemSelectedListener'' a la pròpia ''MainActivity'' i implementant les funcions necessàries com a mètodes d'aquesta.+ 
 +==== Opció 1objecte OnItemSelectedListener ==== 
 +Crear un objecte tipus ''OnItemSelectedListener'' per a cada Spinner, similarment a com solem fer amb els ''OnClickListener'' dels ''Button''
 + 
 +<code java> 
 +Spinner spinner = new Spinner(this); 
 +spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
 +    @Override 
 +    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
 +        // la posició del spinner és 'i', però també es pot buscar amb 
 +        String string = spinner.getSelectedItem().toString(); 
 +    } 
 + 
 +    @Override 
 +    public void onNothingSelected(AdapterView<?> adapterView) { 
 + 
 +    } 
 +}); 
 +</code> 
 + 
 +==== Opció 2: heretar OnItemSelechtedListener a la MainActivity ==== 
 +Podem heretar la interfície ''OnItemSelectedListener'' a la pròpia ''MainActivity'' i implementant les funcions necessàries com a mètodes d'aquesta, tal i com suggereix la [[https://developer.android.com/develop/ui/views/components/spinner#SelectListener|doc oficial del Spinner]]. 
 + 
 +<code java> 
 +public class SpinnerActivity extends Activity implements OnItemSelectedListener { 
 +    ... 
 + 
 +    protected void onCreate(Bundle savedInstanceState) { 
 +        ... 
 +        Spinner spinner = new Spinner(this); 
 +        spinner.setOnItemSelectedListener(this); 
 +        ... 
 +    } 
 + 
 +    public void onItemSelected(AdapterView<?> parent, View view, 
 +            int pos, long id) { 
 +        // An item was selected. You can retrieve the selected item using 
 +        // parent.getItemAtPosition(pos) 
 +    } 
 + 
 +    public void onNothingSelected(AdapterView<?> parent) { 
 +        // Another interface callback 
 +    } 
 +
 +</code>
  
 Ens resultarà un codi més llegible si fem servir la opció 2, al menys en aquest cas. Ens resultarà un codi més llegible si fem servir la opció 2, al menys en aquest cas.
  
-Segueix la [[https://developer.android.com/develop/ui/views/components/spinner#SelectListener|doc oficial del Spinner]] on l'exemple segueix aquesta estratègia implementant les //callback//:+Segueix la [[https://developer.android.com/develop/ui/views/components/spinner#SelectListener|doc oficial del Spinner]] on l'exemple segueix aquesta estratègia implementant les //callback//. Tant en un cas com a l'altra cal implementar les dues funcions:
   * ''onItemSelected'': és on activarem la lògica del nostre joc.   * ''onItemSelected'': és on activarem la lògica del nostre joc.
   * ''onNothingSelected'': és obligatoria implementar-la, però segurament no hi posarem res de codi.   * ''onNothingSelected'': és obligatoria implementar-la, però segurament no hi posarem res de codi.
  
 +\\
 +
 +===== Exercicis =====
 <WRAP todo> <WRAP todo>
 +Crea una app amb 2 ''Spinner'':
 +  * Un creat de forma estàtica amb els noms dels planetes, tal i com planteja la doc oficial de ''Spinner''.
 +  * Un creat programàticament amb els números descrits anteriorment.
 +
 Implementa les //callback// necessàries fent que quan es canvii el valor d'un ''Spinner'' ens mostri un ''Log'' indicant-nos el text "Spinner modificat". Implementa les //callback// necessàries fent que quan es canvii el valor d'un ''Spinner'' ens mostri un ''Log'' indicant-nos el text "Spinner modificat".
 </WRAP> </WRAP>
android_spinner.txt · Darrera modificació: 2022/10/17 17:03 per enrique_mieza_sanchez