Elementos gráficos – Spinner

Posted by in Android, Interfaz gráfica

Los spinners son elementos a de selección de lista a los que se asocia una lista de datos. Por lo tanto este tipo de controles está dividido en dos partes: la parte visual que se representa mediante un desplegable y la parte de datos que se representa mediante un adaptador. Al igual que el spinner, otros elementos como las listas o las listas con cartas utilizan este tipo de estructura para representar un elemento completo. Existen multitud de adaptadores pero inicialmente utilizaremos un objeto de tipo ArrayAdapter ya que es el tipo más simple para poder asociar datos a un objeto.

Spinner

Como se ha dicho, el spinner es un desplegable que permite seleccionar un dato concreto sobre una lista de opciones. Para poder representar un spinner gráficamente:

En este caso las propiedades asociadas al spinner no suelen ser muy grandes, de utilizar alguna sería la de entries que se comentará en el siguiente apartado. Si llevamos el elemento a código java los principales métodos son:

La mayoría de métodos comentados hacen referencia a acceso a datos, pudiendo ser más efectivo el acceso al adaptador que ahora se comentará

Asociar datos a un Spinner – Adaptadores

Los adaptadores representan los datos que se asocian a un elemento de selección. La estructura y asociación de esto es común para cualquier elemento que tenga parte gráfica y parte de datos. Para ello se pueden utilizar adaptadores de diferente tipo, entre los que están:

  • ArrayAdapter: adaptador más simple de todos, donde tan solo se asocia una lista de datos con una apariciencia determinada
  • SimpleAdapter y BaseAdapter: adaptador parecido al anterior pero con una personalización mayor con una vista propia
  • SimpleCursorAdapter: adaptador que se utiliza para asociar datos procedentes de base de datos de forma semi-directa

Construir y asociar adaptadores

Como ya se ha comentado un adaptador es un conjunto de datos que se asocia a un elemento de selección – lista. Para poder crear un adaptador se necesita una lista de datos, una vista que será la que tengan los datos que se van a mostrar y un contexto determinado. La lista de datos puede ser desde un array simple hasta un map que pueda asocia objeto a clave. Para poder manera con comodidad los datos y hacer la lista de opciones dinámica se utilizará una lista de tipo List representada mediante una ArrayList

Para la vista, en este primer ejemplo se utilizará una que el propio android nos ofrece en su librería que muestra un elemento dentro de la lista: android.R.layout.simple_list_spinner_item. Por último como contexto se utilizará el de la propia Activity mediante un objeto de tipo this. Una vez se tienen todos los elementos se construye el objeto de tipo ArrayAdapter

Además de asociar el adaptador al spinner con los datos que se han comentado antes, también se ha personalizado el aspecto de cada uno de los elementos cuando la lista está desplegada mediante el método setDropDownView y el layout que android nos otorga.
Otra opción para rellenar los datos del spinner es la de utilizar la propiedad entries del layout, apuntando a un recurso de tipo array que esté creado

o mediante código

Una vez hecho esto el spinner está configurado tanto por parte gráfica como por parte de datos.

Si llevásemos el adaptador a código java, los métodos más utilizados serían:

De esta forma y con los métodos asociados tanto al spinner como al adaptador se podría saber en un momento determinado cual es el elemento seleccionado dentro de un spinner:

Manejo de eventos en un Spinner

Para poder evaluar el elemento seleccionado de forma automática en el momento de la selección, se utiliza el listener OnItemSelectedListener con los métodos asociados onItemSelected() onNothingSelected()

Los métodos se ejecutarán cuando cambien la selección y cuando el spinner no tenga nada seleccionado. Los parámetros que tienen los métodos son:

  • parent: la vista donde se llevo a cabo la selección
  • view: la vista completa que generó el evento
  • position: la posición del elemento seleccionado
  • id: el id de la fila donde está el elemento seleccionado

Con estos datos, se podría obtener cualquier dato del elemento seleccionado de la siguiente forma

Documentación oficial de OnItemSelectedListener