2012-01-28 45 views
11

estoy teniendo una ruleta que está poblada con una CursorAdapter. Ahora cuando creo ese spinner (dinámicamente) quiero establecer una selección predeterminada diferente a 0 (0 es el primer elemento en la lista CursorAdapter)Spinner.setSelection Android() no funciona

Así que obtuve un setter para ese trabajo que acaba de llamarse después de que el objeto ha sido creado. Pero por alguna razón, pase lo que pase en ese setter, 0 siempre pasa al método onItemSelected() dentro del Spinner's OnItemSelectedListener.

Sin embargo, si sólo tiene que esperar hasta que sucedió la primera selección inicial y corro mi organismo nuevo, todo funciona bien. Por lo tanto, para que sea más claro aquí es lo que veo en el depurador:

  • objeto (spinner) se crea
  • oyente spinner se une
  • colocador es correr, un número, digamos 4 (el spinner contiene mucho más que 4 selecciones) se pasa a la setSelection() método
  • esperar un poco
  • EMPRESA onItemSelected() se ejecuta la primera vez, pero la posición dada a ese método es 0!
  • esperar un poco MÁS
  • nuevo corremos el colocador es ejecutar
  • onItemSelected() de nuevo, esta vez, la posición dada es 4, ya que se supone que es!

Ahora está conectado. Parece que no es posible configurar ese spinner hasta que se haya ejecutado la primera selección inicial, que siempre es 0. Entonces, ¿por qué es así y qué puedo hacer para establecer la selección inicial?

+1

Podría usted por favor enviar el código utilizado al configurar el Spinner? Suena como que podría ser porque tiene un cierto código en el orden equivocado –

+0

Esta respuesta (en otra cuestión de forma) que funcionó para mí: http://stackoverflow.com/a/17370964/1617737 –

Respuesta

30

Pruebe Spinner#setSelection (int position, boolean animate) con animate = false. Recuerdo que hace un tiempo tuve un problema similar y esto funcionó. La implementación interna parece diferir, aparte de la diferencia que proviene de la parte animada.

+5

trabajado como un encanto. – masi

+0

Funcionó para mí también ... pero no sé por qué funciona cuando la animación se hace realidad ... –

1

Si conoce del defecto del artículo spinner seleccionado, se puede escribir de la siguiente manera:

Spinner sp = (Spinner) findViewById(R.id.spinner); 
sp.setSelection(0); // sets the first item 

onItemselectedlistener se llama cuando se cambia la selección de elementos spinner.