6.9.5.-
Programación en Android – Actividad Configuración
V – Control Spinner.
Continuamos
en este capítulo viendo como funciona el control spinner,
algunas de sus opciones y como implementar el código para
tratarlo. Un control spinner
es similar a un control dropdown,
lo
que sería un menú desplegable, sólo que al
pulsarlo nos aparece un diálogo desde el que escoger la
opción. (Parece que en versiones más actuales de la
API (nivel 11) se puede elegir entre que aparezca un diálogo o
un menú desplegable)
Vamos
a ver primero la versión complicada y después veremos
una forma más sencilla de como rellenar los elementos del
spinner.
Forma
“complicada”
Esta
forma de rellenar las entradas del spinner requiere que creemos un
ArrayAdapter para
coger los datos desde el array y asignárselo al spinner,
además configuramos la apariencia inicial del spinner:
Spinner
spin_Generos = (Spinner)
findViewById(R.id.spinner_Genero);
/**
* El método
createFromResource() crea un nuevo ArrayAdapter que
* enlaza cada
elemento en el string array a la apariencia
* inicial que
tendrá el Spinner (Que es como aparecerá cada
elemento
* en el spinner
cuando se seleccione.
*
R.array.Generos: Referencia el string-array
que habíamos creado.
*
android.R.layout.simple_spinner_item: Es un ID que referencia
* un layout para
la apariencia estandar del spinner, y está definido por la
plataforma.
*
*/
ArrayAdapter<?>
adaptador = ArrayAdapter.createFromResource(this,
R.array.array_Generos,
android.R.layout.simple_spinner_item);
/**
*
setDropDownViewResource: Define la apariencia para cada elemento
*
cuando se abre el DropDown.
*/
adaptador
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
/**
* Ahora se
asocian los items del adaptador al spinner:
*/
spin_Generos.setAdapter(adaptador);
|
En
el código ya va explicado lo que hace cada método.
Forma
“sencilla”
En
esta otra forma, debemos editar en el layout del spinner la propiedad
Entries
(android:entries=”@array/array_Generos
en XML), y poner el nombre del array que creamos antes
(array_Generos).
Si
lo hacemos de esta manera nos podemos evitar el código que se
puso antes en la forma “complicada”.
NOTA:
A nivel personal debo decir que la forma “complicada” es
la que está en el tutorial de ejemplo de la API de Android.
Yo lo tengo realizado de ambas maneras y no encuentro diferencia
aparente.
Añadir
una función de Callback
Debemos
añadir un Listener
para que nos indique cuando se pulsa nuestro spinner y que selección
se ha realizado. Para hacer esto podemos utilizar una clase
anónima
o una clase
interna.
En otro ejemplo ya se había visto la clase anónima,
así que ahora se utilizará una clase interna.
Las
clases
internas
son clases que están definidas dentro de otras clases, o
incluso dentro de los métodos, y sólo son accesibles
desde la clase contenedora y sus métodos. (*En el caso de
estar dentro de otro método sólo es accesible por dicho
método.).
Creamos
dentro del método (o dentro de la clase si así lo
deseamos) la siguiente clase:
//Creamos
una clase interna para controlar el callback.
//También
podríamos haberla creado anónima, pero así se
ve mejor.
class
spinner_OnItemSelectedListener
implements
OnItemSelectedListener
{
public
void
onItemSelected(AdapterView<?>
parent, View
view,
int
posicion, long
id)
{
//Se
crea un toast para mostrar el elemento seleccionado:
Toast.makeText(parent.getContext(),
"Elemento
seleccionado:" +
parent.getItemAtPosition(posicion).toString()
+
" Pos:"
+ posicion, Toast.LENGTH_LONG).show();
}
public
void
onNothingSelected(AdapterView<?>
parent)
{
//No
hacemos nada que no hay nada seleccionado.
}
}
|
Y
ahora debemos asociar nuestro spinner a este callback, y añadimos
este código al método:
spin_Generos.setOnItemSelectedListener(new
spinner_OnItemSelectedListener());
|
Ahora
cuando elijamos cualquier cosa dentro del spinner, nos aparecerá
el mensaje toast
indicando la opción elegida.
Inicializando un valor por
defecto
En
el spinner que hemos creado, hemos puesto tres opciones
(Hombre,Mujer,NS/NC),
y al estar dentro de un array el orden que tendrían sería
Hombre=0, Mujer=1, NS/NC=2. Por defecto, cuando se muestra el
spinner, se muestra el primer elemento del array, pero nosotros
queremos que la primera opción que se muestre en caso de no
hacer ninguna selección sea NS/NC.
Esto lo podríamos hacer fácilmente reordenando el
array y poniendo la opción NS/NC en primer lugar, así
sería el elemento 0 del array. Pero también podemos
realizarlo de otra manera, y es a través del método
setSelection(int).
Vamos a ver como poner la selección por defecto en el índice
2:
spin_Generos.setSelection(2);
|
Así
por defecto aparecerá la opción NS/NC.
En
el siguiente capítulo veremos el código para
inicializar las cajas de texto, botones y demás con los datos
de nuestro archivo de configuración, para así poder
ejecutar el programa y que veáis lo realizado hasta ahora,
posteriormente añadiremos el código para la gestión
de la clave y de la fecha.
Ver.
1.0 – Revisión 13/04/2012
Excelente post!!
ResponderEliminar