Saltar al contenido

Android – configurar Spinner para usar array

Revisamos completamente cada tutorial en nuestro sitio web con la meta de enseñarte siempre la información veraz y certera.

Solución:

En lugar de la doble array método, ¿por qué no llenar su ArrayAdapter programáticamente con objetos de un tipo conocido y usarlo? He escrito un tutorial de naturaleza similar (enlace en la parte inferior) que hace esto. La premisa básica es crear un array de objetos Java, dígale a la ruleta sobre el y luego use esos objetos directamente desde la clase spinner. En mi ejemplo, tengo un objeto que representa un “Estado” que se define de la siguiente manera:

package com.katr.spinnerdemo;

public class State 

// Okay, full acknowledgment that public members are not a good idea, however
// this is a Spinner demo not an exercise in java best practices.
public int id = 0;
public String name = "";
public String abbrev = "";

// A simple constructor for populating our member variables for this tutorial.
public State( int _id, String _name, String _abbrev )

    id = _id;
    name = _name;
    abbrev = _abbrev;


// The toString method is extremely important to making this class work with a Spinner
// (or ListView) object because this is the method called when it is trying to represent
// this object within the control.  If you do not have a toString() method, you WILL
// get an exception.
public String toString()

    return( name + " (" + abbrev + ")" );


Entonces puedes llenar una rueda con un array de estas clases de la siguiente manera:

       // Step 1: Locate our spinner control and save it to the class for convenience
    //         You could get it every time, I'm just being lazy...   :-)
    spinner = (Spinner)this.findViewById(R.id.Spinner01);

    // Step 2: Create and fill an ArrayAdapter with a bunch of "State" objects
    ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
          android.R.layout.simple_spinner_item, new State[]    
                new State( 1, "Minnesota", "MN" ), 
                new State( 99, "Wisconsin", "WI" ), 
                new State( 53, "Utah", "UT" ), 
                new State( 153, "Texas", "TX" ) 
                );

    // Step 3: Tell the spinner about our adapter
    spinner.setAdapter(spinnerArrayAdapter);  

Puede recuperar el elemento seleccionado de la siguiente manera:

State st = (State)spinner.getSelectedItem();

Y ahora tiene una clase Java de buena fe con la que trabajar. Si desea interceptar cuando cambia el valor del control giratorio, simplemente implemente OnItemSelectedListener y agregue los métodos apropiados para manejar los eventos.

public void onItemSelected(AdapterView parent, View view, int position, long id) 

    // Get the currently selected State object from the spinner
    State st = (State)spinner.getSelectedItem();

    // Now do something with it.
 

public void onNothingSelected(AdapterView parent ) 
 

Puede encontrar el tutorial completo aquí: http://www.katr.com/article_android_spinner01.php

Entonces, si viniste aquí porque quieres tener tanto la etiqueta como el valor en el Spinner, así es como lo hice:

  1. Simplemente cree su Spinner de la manera habitual
  2. Defina 2 matrices de igual tamaño en su arrayarchivo .xml. Uno para etiquetas, uno para valores
  3. Configura tu Spinner con android:entries="@array/labels"
  4. En su código: cuando necesite un valor, haga algo como esto (no, no tiene que encadenarlo)

    String selectedVal = getResources().getStringArray(R.array.values)[spinner
                             .getSelectedItemPosition()];
    

  5. Y recuerde: estas 2 matrices tienen que coincidir entre sí en cuanto a posiciones y espacios numéricos.

¡Abortar, abortar! No sé lo que me pasó, pero Spinner no soporta android:entryValues attribute. Ese es en realidad de ListPreference que hace algo similar (muestra una lista de elementos en un cuadro de diálogo emergente). Para lo que necesito tendré que (ay) usar el SpinnerAdapter

Eres capaz de animar nuestro quehacer escribiendo un comentario o valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *