Con G de GNU

Spinners en Android, tres formas de poblarlos.

por en jun.02, 2011

¿Hola? ¿Hay alguien? Soy yo, DiCrEn, me recordarán por antiguos posts… de hace 2 años aproximadamente (sin contar con los de GPodcast). Por aquel entonces yo era un alegre jovenzuelo que se creía Dios por programar el snake con C, pero todo eso ha cambiado, ese jovenzuelo ha madurado, ha estudiado y ahora… se cree Dios por tener un par de aplicaciones en el Android Market :D

Me he propuesto volver a tener un poquito de continuidad en el blog, cosa que, por supuesto, no conseguiré, pero bueno…

Y dicho esto vamos a lo que vamos, los spinners de Android. Vamos a dejarnos de gilipolleces y vamos al tema, imagino que tendrás instalado el SDK de android, el eclipse, etc, y que hayas hecho algo para el S.O. de google. Si no es así esto te va a interesar más bien poco.

¿Que son los spinners?

Los spinners en Android son los combobox de toda la vida. Spinner significa, según el traductor de google, hilandero. ¿Porque google ha decidido llamarlo así y no combobox como se ha hecho toda la vida? Y yo que sé. Voy a suponer, de nuevo, que has programado para Android y que sabes cómo se hacen las activitys y demás. Si no lo sabes busca por internet que manuales para empezar hay a patadas.

Para rellenar los spinners es un poquillo complejo, al final todo se arregla picando código, pero si quieres hacer algo especifico (como me pasó a mí, de hecho hay cosas que aún no he sabido arreglar) pues tiene su miga.

Vamos a lo básico. Para crear los objetos de los views en android se hace con findViewById.

Spinner prueba = (Spinner) findViewById(R.id.spinner1);

Ya tenemos el objeto de nuestro spinner. Ahora para poblarlo usamos un ArrayAdapter. Voy a comentar tres formas de hacerlo, dos de ellas bastante populares por internet, poblarla desde un archivo xml de arrays y desde la base de datos SQLite de Android, y una no tan popular pero bastante útil (y más compleja). Después de esto comentaré como obtener los datos elegidos por el usuario y porque me gusta más el tercer método para según qué cosas.

Poblando Spinners

Desde arrays.xml

Bien amigos, para esto necesitamos un archivo arrays.xml con los textos que queramos rellenar en el spinner y un par de líneas de código. El archivo arrays.xml, situado en res/values, tiene el siguiente formato.

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="comidas">
        <item>Salchichas</item>
        <item>Huevos</item>
        <item>Tomates</item>
    </string-array>
</resources>

Bien, una vez que tengamos esto vamos a nuestro activity en java y utilizamos el siguiente código que explicaré después.

1
2
3
4
5
6
//Creamos el adaptador
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.comidas,android.R.layout.simple_spinner_item);
//Añadimos el layout para el menú
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Le indicamos al spinner el adaptador a usar
prueba.setAdapter(adapter);

Analicemos línea por línea.

En la primera creamos un ArrayAdapter. Tenemos que indicar entre <> el tipo de objeto que irá dentro del ArrayAdapter para evitar warnings y mejorar la legibilidad del código, en este caso CharSequence.

Este ArrayAdapter lo creamos pasándole como parámetros el contexto, que lo pasamos directamente con this (en otros casos tendrás que hacer un getApplicationContext() ) la referencia a las cadenas de texto que queremos y el layout genérico que proporciona Android para los Spinners.

Con la siguiente línea indicamos el layout, de nuevo genérico de Android, para crear el menú desplegable.

Por último, le añadimos al objeto del spinner el adaptador.

Una vez hecho esto ya tenemos nuestro precioso Spinner listo para entrar al campo a jugar. Vamos a complicarlo un poco más.

Desde SQLite

Android proporciona para nuestro deleite personas una base de datos SQLite. Aquí es posible que tengamos los datos que necesitamos para poblar nuestro Spinner. Vamos a ello.

Me ahorro el explicar cómo crear una base de datos SQLite en android, si necesitáis información sobre cómo manejarla ya sabéis, internet tiene la respuesta, solo diré que está abierta en el objeto baseDatos, que la tabla donde están los datos se llama comidas y la columna con lo que lo vamos a poblar nombres, además de una id.
Vamos con el código.

1
2
3
4
5
6
7
8
//Creamos el cursor
Cursor c = baseDatos.rawQuery("select id AS _id, nombre from comidas", null);
//Creamos el adaptador
SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item,c,new String[] {"nombre"},    new int[] {android.R.id.text1}); 
//Añadimos el layout para el menú
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Le indicamos al spinner el adaptador a usar
prueba.setAdapter(adapter2);

Veamos, con el cursor hacemos un Query a la base de datos. Aquí hay un detalle importante, para que esto funcione necesitamos que la columna del identificador se llame _id, pero, no sé por qué, si la llamas así en la base de datos y luego haces un select normal no funciona, cosas de google (¿un bug?). Con AS funciona estupendamente. El segundo parámetro es para parámetros de selección, como no queremos nada pues le ponemos null.

Vayamos con el adaptador, que tiene tela. Creamos el adaptador en base a un cursor. Los parámetros son el contexto y el layout por defecto, como en el caso anterior, el cursor que hemos creado en la línea anterior, un array de String donde le indicamos que columna es la que tiene que tomar para mostrarlo y de nuevo otro layout por defecto que, sinceramente, no sé muy bien que hace.

Las otras dos líneas son iguales que en el caso del arrays.xml. Así de sencillo, ya tenemos un spinner que nos mostrará los registros de nuestra base de datos. Ahora vamos a complicarlo un poquito más.

Desde un objeto

En ocasiones necesitamos poblar el Spinner con elementos que no están en SQLite o en un array, como puede ser elementos que nos vengan desde una conexión a una base de datos, creados dinámicamente, o lo que sea.

Veamos los ingredientes; un spinner, que ya tenemos, una clase que genere los objetos que queramos, con su toString sobrescrito, unas cuantas líneas similares a las anteriores y sazonar al gusto.

Vamos con la clase de los objetos, que no tiene mucho misterio, pero bueno.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ObjetosClase{
	int id;
	String nombre;
	//Constructor
	public ObjetosClase(int id, String nombre) {
		super();
		this.id = id;
		this.nombre = nombre;
	}
	@Override
	public String toString() {
		return nombre;
	}
	public int getId() {
		return id;
	}
}

Creo que está claro, no hay que explicarlo. El getId lo usaremos en el siguiente punto, paciencia. Vale, ahora a crear el spinner.

1
2
3
4
5
6
7
8
9
10
11
//Creamos la lista
LinkedList<ObjetosClase> comidas = new LinkedList<ObjetosClase>();
//La poblamos con los ejemplos
comidas.add(new ObjetosClase(1, "Salchichas"));
comidas.add(new ObjetosClase(2, "Huevos"));
comidas.add(new ObjetosClase(3, "Tomate"));
//Creamos el adaptador
ArrayAdapter<ObjetosClase> spinner_adapter = new ArrayAdapter<ObjetosClase>(this, android.R.layout.simple_spinner_item, comidas);
//Añadimos el layout para el menú y se lo damos al spinner
spinner_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
prueba.setAdapter(spinner_adapter);

Si controlas un poco de java ves que he creado un nuevo LinkedList y he metido ahí los objetos con las 3 comidas que estamos utilizando.

Después he creado el ArrayAdapter como en el primer caso, solo que esta vez lo hemos creado pasándole el LinkedList. Fijaos que en este caso creamos el ArrayAdapter como cualquier objeto, y que en el primer caso utilizábamos el método estático createFromResource.

El resto ya lo conocemos de sobra. Ya tenemos nuestro spinner con nuestros objetos personalizados. Recordad que lo que toma como nombre es lo que está indicado en el toString.

Obteniendo el dato seleccionado

Ahora que ya tenemos nuestro spinner lleno de datos necesitamos conocer que dato elije el usuario. Para ello tenemos que crear un oyente. En este caso vamos a construirlo para el tercer modo de creación, para obtener el id, para el resto sería igual pero sustituyendo en la línea 4 el código, obteniendo el item y haciéndole toString directamente.

1
2
3
4
5
6
7
8
9
10
11
public class MyOnItemSelectedListener implements OnItemSelectedListener {
	public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
		if (parent.getId() == R.id.spinner1) {
			alimentoId = ((ObjetosClase) parent.getItemAtPosition(pos)).getId();
		}
		//Podemos hacer varios ifs o un switchs por si tenemos varios spinners.
	}
	public void onNothingSelected(AdapterView<?> parent) {
		// Do nothing.
	}
}

Perfecto, ahora en cuanto un usuario pulse una opción de nuestro spinner se guardará en la variable alimentoId el id de nuestra comida escogida.

Como podéis ver, utilizando nuestros propios objetos es mucho más sencillo recuperar los datos. Podemos crear objetos relativamente grandes, con varios datos, y obtenerlos y tratarlos como queramos en el oyente. Estoy casi seguro que con el primer método también se podría sacar el id (o lo que queramos) de forma muy similar, pero no lo he conseguido.

Bueno hasta aquí el post. Perdonad el largor o longanismo de este, pero seguro que a más de uno le sirve.

Android, Programación
56 cometarios:
  1. DiCrEn
    Firefox 4.0.1 Windows XP

    ¡El que me pille la referencia a lo de “largor o longanismo” se lleva un premio! jeje

  2. Carpio
    Firefox 4.0.1 Windows XP

    Perfecto! funciono…
    pero que como podría hacer si quisisera colocar una de las opciones seleccionadas??

    estoy usando el metodo de la base de datos…

    Gracias.

  3. DiCrEn
    Firefox 4.0.1 Windows XP

    ¿colocar una de las opciones? ¿Entiendo que quieres ordenar la lista? Si es así puedes usar un ORDER BY en la sentencia SQL y ya esta.

    Si es otra cosa lo siento pero no te he entendido.

  4. Carpio
    Firefox 4.0.1 Windows XP

    me refiero a que aparezca seleccionada una opcion..

    haciendo los pasos que indicas aparece siempre seleccionada la primera!

    cuando selecciono otra se guarda en una tabla de la BD con el metedo que indicas!

    pero cuando vuelvo a entrar en la activity no aparece seleccionada la que seleccione anteriormente sino la primera, y quisiera saber como puedo hacer para que aparezca seleccionada esa que marque.

    gracias…

  5. DiCrEn
    Firefox 4.0.1 Windows XP

    Puedes utilizar spinner.setSelection(X) en el onCreate para cuando entres a la activity se te seleccione el de la posicion X por defecto.

    No encuentro ahora que se pueda hacer de otra forma, pasandole el nombre, pero seguro que hay alguna forma de hacerlo aunque sea indirectamente.

  6. Carpio
    Firefox 4.0.1 Windows XP

    ummm.. prefiriria algo por el _id pero me sirve por la posicion por ahora!! graciaaaaaaaas!!! ;)

  7. Fredy
    Firefox 4.0.1 Windows XP

    Necesito llenar un listview.
    Intenté adaptar el código pero me da error en la asignación del adaptador.

    ListView prueba = (ListView)findViewById(R.id.listView2);

    ArrayAdapter adapter =
    ArrayAdapter.createFromResource(
    this,R.array.comidas ,android.R.layout.activity_list_item);

    prueba.setadapter(adapter);

    Error en la linea:
    prueba.setadapter(adapter);
    Me dice “Syntax error on token “adapter”,VariableDeclaratorId expected aqfter this token”

    Si me das una mano gracias.

    Fedy

  8. nico
    Google Chrome 12.0.742.122 Windows XP

    largor o longanismo: les luthiers la comision (himnovaciones)

  9. mau
    Google Chrome 14.0.835.187 Windows 7

    mae buenisimo! gracias por el aporte!

  10. Roberto
    Google Chrome 14.0.835.202 GNU/Linux

    Oye amigo, ya he llenado el spinner desde XML, ahora quiero llenarlo desde SQLite, sin embargo, con la opcion que das me marca un error, mi pregunta es, el parametro String [] (el penultimo) a que hace referencia?

    Saludos Gracias =)

  11. DiCrEn
    Firefox 7.0.1 GNU/Linux

    Con ese array de Strings haces referencia al nombre de las columnas, en este caso a la columna nombres.

  12. Roberto
    Google Chrome 14.0.835.202 GNU/Linux

    Aqui te dejo mi codigo, checalo, ya intente poner lo del AS en la consulta pero en SQLite me marca error, asi que no creo que sea por eso porque igual ya lo probe.
    Necesito tu ayuda

    Spinner cmbPilas=(Spinner) findViewById(R.id.cmbPilas);
    DatabaseHelper dbh=new DatabaseHelper(this);
    SQLiteDatabase db=dbh.getReadableDatabase();
    Cursor pilas = db.rawQuery(“select * from pilas”, null);
    //SimpleCursorAdapter c=new

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item,pilas,new String[] {“ID”,”Capacidad”}, new int[] {android.R.id.text1});
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    cmbPilas.setAdapter(adapter);

  13. DiCrEn
    Firefox 7.0.1 GNU/Linux

    Hace mucho que no utilizo esto, pero se me ocurre que quizás es porque utilices el comodín al crear el cursor, de echo creo que fue uno de mis errores cuando estaba programando un proyecto de este tipo.

    Lo dicho, haz el select indicando todos los nombres de las columnas, sin usar comodines.

  14. Roberto
    Google Chrome 14.0.835.202 GNU/Linux

    Tampoco, ya lo intente asi “select _idpilas, cantidad from pilas;”, pero ya checaste bien mi codigo?
    esta todo bien?

  15. DiCrEn
    Firefox 7.0.1 GNU/Linux

    El nombre de la columna de id tiene que ser _id, tu la llamas _idpilas. De todos modos, si no es eso pon el error que te da.

  16. Roberto
    Google Chrome 15.0.874.102 GNU/Linux

    no such colum: id:, while compilling: select _idpilas, capacidad from pilas;

    Si será por eso? Apoco es afuerza que el id se debe llama _id???

  17. DiCrEn
    Firefox 7.0.1 GNU/Linux

    Si, efectivamente, se tiene que llamar _id, lo puse en el articulo, y es una cosa que me dio mucha lata en su momento.

    Si te das cuenta en el error te dice que no encuentra la columna id… mas claro agua jeje

    Un saludo.

  18. rodrigo
    Firefox 7.0.1 Windows XP

    final Spinner spinner1=(Spinner)findViewById(R.id.spinner1);
    Cursor c = baseDatos.rawQuery (“select _id,razas from perros;”, null);
    Hola, mira coloco esto y no funca, si me puedes ayudar… genial con el try catch me tira esto

    java.lang.NullPointerException
    pero no entiendo que variable esta llegando nula

    Gracias…

    SimpleCursorAdapter adaptador1=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item,c,new String[] {“_id”}, new int[] {android.R.id.text1});

    adaptador1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner1.setAdapter(adaptador1);

  19. Roberto
    Google Chrome 15.0.874.106 GNU/Linux

    Que onda men te vuelvo a dar guerra, ya me salio lo de llenar el spinner, ahora, como podria sacar el valor de un spinner que ha sido llenado desde DB??
    Gracias

  20. Marce
    Firefox 10.0.2 Ubuntu 64 bits

    Hola. Muy bueno el articulo. Yo lleno un spinner desde la base de datos. Despues una de las opciones del menu es agregar un fila mas a la tabla que uso para llenar el spinner. Cuando termino de agregar un nuevo registro a la base de datos y vuelvo a la pantalla del spinner, este spinner no esta actualizo. Como puedo hacer para actualizarlo automaticamente?

  21. Daniel
    Firefox 8.0 Ubuntu 64 bits

    También es posible poblar un Spinner de una forma muy sencilla aquí no descrita:

    Hay una propiedad del Spinner llamada “entries” en la cual referenciando un array que tengas definido en string.xml, automáticamente te lo pobla con los valores de ese array.

    Un saludo.

  22. Tiberius
    Opera 9.80 GNU/Linux

    Gran artículo.

  23. Alastor
    Opera 9.80 Windows 7

    Muy bueno, con códigos asi de entendibles es posible crear aplicaciones entretenidas, veremos que me sale, XD

    Gracias !!!

  24. Jordi
    Google Chrome 18.0.1025.151 Windows XP

    Me ha ido de fábula!! Muchas gracias!!

  25. Roberto
    Google Chrome 18.0.1025.162 Windows 7

    Oye una pregunta desde un xml como se haría para leer el label y el id osea algo asi

    Uno
    1

    Dos
    2

    Tres
    3

    para que se muestre el id y el otro este oculto

  26. luis ibarra
    Google Chrome 18.0.1025.162 Windows 7

    hola, bueno tengo este codigo pero no puedo lograr que me muestre los valores. Ya tengo la bd con datos (ya cheque)
    Spinner spnEmpleados = (Spinner)findViewById(R.id.spnEmpleados);
    Cursor cur = database.rawQuery(“SELECT usuario FROM Empleados”, null);
    startManagingCursor(cur);
    String[] from = new String[] { “usuario” };
    int[] to = new int[] { android.R.id.text1 };
    SimpleCursorAdapter mAdapter =new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, cur, from, to);
    mAdapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item);
    spnEmpleados.setAdapter(mAdapter);

    alguna ayuda por favor?

  27. dave
    Firefox 12.0 Windows 7

    hola estoy llenando el spinner con un ArrayList pero en la pantalla no me muestra el contenido del array, sino una direccion de este tipo para cda uno d elos elementos contenidos en el spinner:

    Mi.Paquete.Objeto@4456

    sin embqargo al pulsar sobre un elemento si obtengo los valores que corresponden a tal elemento, alguien sabe que es lo que pasa?

  28. DiCrEn
    Google Chrome 18.0.1025.168 Ubuntu

    Hola dave.

    Disculpa la tardanza en contestar, fui a hacerlo el dia que comentaste pero no se porque petó el blog y luego se me pasó jeje

    Creo que simplemente es que tienes que sobrescribir el toString de los objetos con los que poblaste el ArrayList.

    Un saludo.

  29. arck
    Firefox 12.0 Windows 7

    estoy intentando llenar un spinner con los datos de un LinkedList procesos = new LinkedList();
    lo lleno en otra clase en la que esta definida como static public Linkedlist……
    la cosa es que al pasar a la clase donde tengo los spinner peta por todos lados y no se que los tomo mal, me podrias dar tu email para que yo te envie el codigo y me dices ¿que hice catastroficamente mal?
    gracias

  30. Jose
    Firefox 12.0 Windows 7

    te crees un Dios por tener un par de apps en el Market, pobre retrasado, seguro eres un friki y tonto programador, sin novia y sin vida jajaja, saludos imbesil.

  31. nycoag92
    Google Chrome 19.0.1084.56 Windows 7

    estoy tomando los valores desde un array toma como defecto el primer valor del array. Hay alguna forma para que esto no pase, es decir q no tome valores, q salga en blanco o un msj tipo “Seleccione una opción”

  32. Toto
    Firefox 14.0.1 Windows XP

    gracias loco!!! un abrazo!

  33. yor
    Firefox 15.0 Windows XP

    Humm no veo por ningun lado eso de la conexion a mysql, osea que si yo tengo mi BD en un servidor y quiero que el spinner se llene con los datos de una tabla… obviamente con sqlite es facil pues hay muchos tutoriales de eso, en tu clase ObjetosClase no veo ningun tipo de conexion a BD lo unico que haces es llenar un objeto y luego cargarlo en el spinner, si hay un forma de hacer lo que dije me gustaria que lo postearas… Gracias.

  34. DiCrEn
    Google Chrome 21.0.1180.79 GNU/Linux 64 bits

    Claro, yo explico ahí como cargar el spinner, para llenar el objeto tendrás que buscarte la vida jeje Yo en su momento lo hice a trabes de json con una petición a un script php.

  35. javasaurus
    Internet Explorer 8.0 Windows XP

    peroooo donde metes el codigo dentro de la activity, en el oncreate??? TUTORIAL MUY MAL EXPLICADO, UN COPY PASTE DEL DE ANDROID DEVELOPERS

  36. DiCrEn
    Google Chrome 21.0.1180.79 GNU/Linux 64 bits

    Perdona la expresión, pero copiado mis cojones, de hecho lo escribí aquí porque me resulto muy dificil encontrar esta información en su momento.

    El código lo metes donde tu quieras, en el oncreate si quieres que los spinner se pueblen al iniciar el activity, o en una función si quieres que se pueblen cuando se ejecute esa función… depende de lo que quieras. Como bien puse al inicio del post escribía esto suponiendo que se tienen las nociones básicas de android, y el donde colocar un código ya no es básico de android, es básico de la programación en general.

  37. javasaurus
    Internet Explorer 8.0 Windows XP

    q si, q no lo habia leido: fui directamente al codigo. DISCULPAS (quise modificar comentario xo no se puede).

    ¿sabes si se pueden hacer spinners dependientes? ej. uno comunidades autonomas, otro provincias -> al seleccionar una comunidad se cargan las provincias

    gracias

  38. david
    Google Chrome 21.0.1180.89 Windows 7

    Excelente!!!
    Me sirvio de mucho, gracias por tomarte el tiempo de hacer esto.
    Tengo la misma duda de javasaurus, se pueden crear spinners dependientes?
    Gracias

  39. DiCrEn
    Google Chrome 21.0.1180.79 GNU/Linux 64 bits

    @javasaurus Supongo que con ponerle un listener al primer spinner que escuche que opción has elegido y puebles el otro será suficiente.

    @david hummm… pues no lo se, ¿con swing? Ahora estoy trabajando con swing en un proyecto, lo puedo probar cuando tenga tiempo.

  40. yor
    Firefox 15.0.1 Windows XP

    Hola, bueno luego de haber logrado llenar los spinner (tenias razon me pase una “vida” buscando como, y al final lo logre con json y php), ahora tengo la duda de:
    si tengo mi bd en la aplicacion android puedo migrar esos datos a una bd mysql en un hosting??
    de poderse me podrias almenos dar una pista de como hacerlo? llevo un par de dias buscando y la verdad a mi la idea de que se pueda me parece un poco loco :D

  41. DiCrEn
    Google Chrome 21.0.1180.89 GNU/Linux 64 bits

    Hola yor!

    Piensa que android usa sqlite, hay muchas herramientas que seguramente te sirvan.

    De un googleo me salen unas cuantas utilidades e infinitud de blogs que lo comentan, échale un ojo, recuerda, migrar de sqlite a mysql.

    El archivo de sqlite si mal no recuerdo se encontrará en /data/app/nombreDeTuApp.

    Un saludo, espero que lo consigas, y perdona por no ser más concreto.

  42. yor
    Firefox 15.0.1 Windows XP

    Hola!
    Bueno la verdad yo me preguntaba si se podia hacer mediante programación en android no con alguna herramienta “X”, que de esas si he visto varias.
    Espero tu respuesta y disculpa tanta molestia.

  43. Laura
    Opera 9.80 Windows XP

    Hola q tal amigo esta muy bueno tu post quisiera saber si existe la forma de llenar un Spinner mediante un Edit Text q al momento de ingresar una cadena esta se copie o se muestre en el Spinner asi sucesivamente conforme el usuario lo requiera.

    Espero puedas ayudarme
    Gracias por tu atencion

  44. DiCrEn
    Google Chrome 22.0.1229.94 GNU/Linux 64 bits

    Hola Laura.

    Supongo que usando el método de poblarlo con objetos funcionará, creas el objeto a partir del EditText y lo metes al spinner.

    Un saludo.

  45. jorge coronel
    Google Chrome 24.0.1312.56 Windows 7

    Hola, espero me puedas ayudar, para cargar datos dinamicos en dos spinner ejemplo clasico
    tabla 1 Estados
    Tabasco
    Veracruz
    etc
    tabla 2 ciudades
    Centro (tabasco)
    Macuspana(tabasco)
    poza rica(veracruz)
    etc
    si en el spinner estados elijo tabasco, me deberian de salir solo centro Y macuspana, si elijiera veracruz en el otro espiner seria poza rica, alguna forma de ayudarme saludos…

  46. DiCrEn
    Google Chrome 24.0.1312.52 GNU/Linux 64 bits

    Hola Jorge.

    Hace mucho que no trabajo con spinners y la verdad es que no me acuerdo exactamente del código, pero supongo que puedas hacer un oyente que coja la selección del primer spinner y, dentro del oyente, cargar el segundo spinner con la información que necesites.

    Siento no poder ser más claro, espero que te sirva de ayuda.

    Un salduo.

  47. aurora
    Firefox 19.0 Windows 7

    Hola,

    Estoy usando un spinner lleno a partir de un array, pero cuando lanzo la Activity no me aparecen los valores del array.

    Spinner valores = (Spinner) findViewById(R.id.spiner_valoracion);

    ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,R.array.valor);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    valores.setAdapter(adapter);

    Lo que intento es que me carge los valores y al pinchar sobre él se despliegue con todos los valores del array.

    Si puedes ayudarme

    Gracias
    ;)

  48. Exeleon
    Google Chrome 26.0.1410.64 Windows 7

    El método 3 usando objetos de la clase me pareció interesante, yo lo había hecho guardando el ID del elemento en el atributo Tag del TextView y el NOMBRE en el atributo Text…

  49. Perezosso
    Firefox 23.0 Windows XP

    Bien explicado. Lo que me molesta del Java es la que hay que preparar para rellenar un spinner…podian hacerlo mas sencillo pues para aparender fatiga más. Cpmo bien dices al final el codigo hay que picarlo. Gracias

  50. Palomita
    Google Chrome 31.0.1650.57 Windows 7

    Que tal, un saludo a todos, espero puedan ayudarme, quiero sincronizar 3 spinners en Android, alguien que pueda ayudarme

    El ejemplo es: si selecciono un item de index 4 en X spinner los otros dos seleccionen el mismo index en la posicion 4.

    Gracias de antemano

  51. Juan González
    Google Chrome 31.0.1650.63 Windows NT

    Buenas noches, estoy probando el método del fichero .xml, pero al lanzar la aplicación me da el típico error de “desafortunadamente ha dejado de funcionar”

    Lo que quiero es desplegar una serie de valores para asignar a un temporizador.

    El XML es este:
    —————————————-

    0:00
    0:15
    0:30
    0:45
    1:00
    1:15
    1:30
    1:45
    2:00
    2:15
    2:30
    2:45
    3:00
    3:15
    3:30
    3:45
    4:00
    4:15
    4:30
    4:45
    5:00

    ————————————

    Y el código que probé:

    ————————————
    ArrayAdapter roundAdapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.values, android.R.layout.simple_spinner_item);
    roundAdapter.setDropDownViewResource((android.R.layout.simple_spinner_dropdown_item));
    sp_round.setAdapter(roundAdapter);
    ————————————-
    (y el mismo de arriba pero con “this” en vez de “getApplicationContext()”

    Alguna sugerencia? Muchas gracias por tu tiempo :)

    Un saludo, Juan.

  52. Jonathan
    Google Chrome 31.0.1650.63 Windows 7

    Buenas como puedo mostrar 2 datos traidos de una base de datos mysql y concatenados en un spinner usando un simpleadapter ejemplo nombre y apellido ya que solo puedo mostrar el nombre

  53. Toqu3
    Google Chrome 33.0.1750.146 Windows 7

    Buenos dias..
    Quisiera saber si se puede poner en un spinner key y value.. algo asi como un select en html VALUE ..
    gracias

  54. Ernesto
    Google Chrome 37.0.2062.120 Windows 7

    saludos :
    como hago para que al seleccionar un datos en el spinner internamente me envié el id a mi consulta que ara que me cargue otro spinner

  55. gustavo
    Google Chrome 38.0.2125.111 Windows 7

    ok, y como llenar un spinner con los datos que vaya ingresando. ejemplo:
    tengo mi ventana principal en la cual va a obtener la ip y un puerto. al presionar el boton de configurar datos me manda a ingresar la ip y el puerto. estos se van a ir guardando en un arreglo de tipo objeto cada vez que desee guardar nuevos datos. despues de que eh guardado los datos mi ventana principal jala esos datos y hace la conexion. tengo otro boton donde me va a mostrar los datos que eh llenado ip y puerto. Tengo otro boton el cual se llama editar, este muestra lo que di de alta y me permite eliminar y editar lo que guarde anteriormente.

Deja tu comentario! no mordemos!

¿Buscando algo?

Usa el formulario de debajo:

¿Sigues sin encontrar lo que buscas? ¡Deja un comentario o ponte en contacto con nosotros para que lo encontremos por ti!