Spinner

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Introdución

  • Un Spinner é unha lista despregable de opcións na que o usuario pode escoller unha delas.

00 spinners form.png


  • Imos comezar usando o Spinner apoiándonos primeiro nun botón de texto.


  • Unha forma estática de definir os datos que van encher o Spinner é usando un arquivo de recursos de tipo String-array:


Caso práctico

  • Crear o proxecto U2_12_Spinner
  • Nunha primeira versión imos crear unha aplicación que permita seleccionar un planeta nun Spiner e logo premendo un botón nos indicará o ítem seleccionado e a súa posición.


Arquivo de recursos: String-Array


  • Ficheiro de recursos: array_planetas.xml.
  • Polo nome do string_array é por onde se vai acceder ao array.
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3      <string-array name="planetas">
 4         <item>Mercurio</item>
 5         <item>Venus</item>
 6         <item>Terra</item>
 7         <item>Marte</item>
 8         <item>Xúpiter</item>
 9         <item>Saturno</item>
10         <item>Urano</item>
11         <item>Neptuno</item>
12     </string-array>
13 </resources>


XML do Layout

  • Observar como se crea un Spinner
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <Spinner
 8         android:id="@+id/spin_planetas"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:entries="@array/planetas" />
12 
13     <Button
14         android:id="@+id/btn_seleccion"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:onClick="onButtonClick"
18         android:text="Preme cando selecciones" />
19 
20     <TextView
21         android:id="@+id/lbl_resultado"
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:text="Selecciona un planeta" />
25 
26 </LinearLayout>
  • Liña 11: é onde se vincula o Spinner co recurso tipo array: planetas.
  • Liña 17: chamamos a un método cando se faga Click.


Código Java

 1 package com.example.u2_12_spinner;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.View;
 7 import android.widget.Spinner;
 8 import android.widget.TextView;
 9 
10 public class U2_12_Spinner extends Activity {
11 
12 	@Override
13 	protected void onCreate(Bundle savedInstanceState) {
14 		super.onCreate(savedInstanceState);
15 		setContentView(R.layout.activity_u2_12__spinner);
16 	}
17 
18 	@Override
19 	public boolean onCreateOptionsMenu(Menu menu) {
20 		// Inflate the menu; this adds items to the action bar if it is present.
21 		getMenuInflater().inflate(R.menu.u2_12__spinner, menu);
22 		return true;
23 	}
24 
25 	public void onButtonClick(View v) {
26 		Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
27 		TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);
28 
29 		lblResultado.setText("Seleccionaches "
30 					+ spinPlanetas.getSelectedItem() 
31 					+ "\nque está na posición " + spinPlanetas.getSelectedItemId());
32 	}
33 
34 }
  • Liñas 26,27: Definimos os obxectos nos que recollemos os controis declarados no Layout.
  • Liñas 31,32: seleccionamos o elemento da lista e a súa posición.

Capturar o evento cando se selecciona un ítem

  • Nesta segunda versión vaise deixar que o botón siga realizando a súa función, pero agora cando seleccionemos un ítem que se capture o evento e que na etiqueta indicar cal é o planeta seleccionado e a súa posición.
 1 package com.example.u2_12_spinner;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.View;
 7 import android.widget.AdapterView;
 8 import android.widget.AdapterView.OnItemSelectedListener;
 9 import android.widget.Spinner;
10 import android.widget.TextView;
11 
12 public class U2_12_Spinner extends Activity {
13 
14 	@Override
15 	protected void onCreate(Bundle savedInstanceState) {
16 		super.onCreate(savedInstanceState);
17 		setContentView(R.layout.activity_u2_12__spinner);
18 
19 		Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
20 
21 		spinPlanetas.setOnItemSelectedListener(new OnItemSelectedListener() {
22 
23 			@Override
24 			public void onItemSelected(AdapterView<?> parent, View view,
25 					int pos, long id) {
26 				// TODO Auto-generated method stub
27 
28 				TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);
29 
30 				lblResultado.setText("Seleccionaches "
31 						+ parent.getItemAtPosition(pos)
32 						+ "\nque está na posición " + pos);
33 
34 			}
35 
36 			@Override
37 			public void onNothingSelected(AdapterView<?> arg0) {
38 				// TODO Auto-generated method stub
39 
40 			}
41 		});
42 	}
43 
44 	@Override
45 	public boolean onCreateOptionsMenu(Menu menu) {
46 		// Inflate the menu; this adds items to the action bar if it is present.
47 		getMenuInflater().inflate(R.menu.u2_12__spinner, menu);
48 		return true;
49 	}
50 
51 	public void onButtonClick(View v) {
52 		Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
53 		TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);
54 
55 		lblResultado.setText("Seleccionaches " + spinPlanetas.getSelectedItem()
56 				+ "\nque está na posición " + spinPlanetas.getSelectedItemId());
57 	}
58 
59 }
  • Liña 21: Listener que se chama cando se selecciona un elemento do Spinner
  • Liña 24: O métod onItemSelected(AdapterView<?> parent, View view, int pos, long id) é chamado cando se selecciona un item distinto do xa seleccionado.
  • Parámetros:
    • parent: O elemento (AdapterView) onde se fixo a selección.
    • view: A vista que foi selecionada dentro do AdapterView
    • position: A posición da vista dentro do Adaptador.
    • id: Cada ítem pode ter varias filas (neste caso só ten unha) este campo indicaría a fila dentro do ítem





-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).