viernes, 13 de abril de 2012

6.9.5.Android-Control Spinner


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

1 comentario: