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
android_spinner [2022/10/17 16:09]
enrique_mieza_sanchez [Connectant les callback dels Spinner]
android_spinner [2022/10/17 17:03] (actual)
enrique_mieza_sanchez [Creació d'un spinner de forma gràfica]
Línia 28: Línia 28:
 Però nosaltres volem un //dropdown// senzill, i per tant ho farem més simple, assignant la llista de valors al control i llestos. Hi ha molts casos que cal això i no necessita la complexitat de l'Adapter. Però nosaltres volem un //dropdown// senzill, i per tant ho farem més simple, assignant la llista de valors al control i llestos. Hi ha molts casos que cal això i no necessita la complexitat de l'Adapter.
  
-Som-hi: +<WRAP todo> 
-  - Crear el ''Spinner'' dins el nostre //layout// de la nostra ''Activity'' (per exemple, arxiu ''activity_main.xml''). Ho podem fer de forma gràfica.+  Crea una nova app amb ''EmptyActivity''. 
 +  - Crea el ''Spinner'' dins el //layout// de la ''MainActivity'' (per exemple, arxiu ''activity_main.xml''). Ho podem fer de forma gràfica.
   - Crear la [[https://developer.android.com/guide/topics/ui/controls/spinner#Populate|llista de planetes que diu l'article del Spinner]].   - Crear la [[https://developer.android.com/guide/topics/ui/controls/spinner#Populate|llista de planetes que diu l'article del Spinner]].
   - Assignem el valor de l'array de planetes al ''Spinner''.   - Assignem el valor de l'array de planetes al ''Spinner''.
   - En el codi, poder recollir el valor del Spinner amb <code>String text = mySpinner.getSelectedItem().toString();</code>   - En el codi, poder recollir el valor del Spinner amb <code>String text = mySpinner.getSelectedItem().toString();</code>
 +  - Posa un botó que quan el premis reculli el valor del ''Spinner'' i el mostri en un ''Toast''.
 +</WRAP>
  
 \\ \\
Línia 64: Línia 67:
 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 80:
 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 88:
 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'':<code java>+ 
 + 
 +==== 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 spinner = new Spinner(this);
 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
Línia 103: Línia 109:
 }); });
 </code> </code>
-  - Heretar la interfície ''OnItemSelectedListener'' a la pròpia ''MainActivity'' i implementant les funcions necessàries com a mètodes d'aquesta.<code java> + 
-Spinner spinner = new Spinner(this); +==== Opció 2: heretar OnItemSelechtedListener a la MainActivity ==== 
-spinner.setOnItemSelectedListener(this);+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> </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.
android_spinner.1666022960.txt.gz · Darrera modificació: 2022/10/17 16:09 per enrique_mieza_sanchez