¿Cómo puede configurar el detector de eventos para un Spinner cuando cambia el elemento seleccionado?
Básicamente, lo que estoy tratando de hacer es algo similar a esto:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
android
events
spinner
android-spinner
Soni Ali
fuente
fuente
Respuestas:
Algunas de las respuestas anteriores no son correctas. Funcionan para otros widgets y vistas, pero la documentación del widget Spinner establece claramente:
Mejor use OnItemSelectedListener () en su lugar:
Esto funciona para mi.
Tenga en cuenta que el método onItemSelected también se invoca cuando se construye la vista, por lo que puede considerar ponerlo dentro de la
onCreate()
llamada al método.fuente
onItemSelected(...)
no es golpeado. (Lo sé porque me acabo de enterar por las malas)Nota: recuerda una cosa.
El
OnItemSelectedListener
evento Spinner se ejecutará dos veces:Intenta diferenciar esos dos usando la variable flag.
fuente
Puede implementar la
AdapterView.OnItemSelectedListener
clase en su actividad.Y luego use la siguiente línea dentro de
onCreate()
Luego anule estos dos métodos:
fuente
https://stackoverflow.com/q/1714426/811625
Puede evitar que se llame a OnItemSelectedListener () con una simple verificación: almacene el índice de selección actual en una variable entera y verifique dentro de onItemSelected (..) antes de hacer nada.
P.ej:
Por supuesto, ¡
iCurrentSelection
debe estar en el alcance del objeto para que esto funcione!fuente
iCurrentSelection
variable se declara dentro de esta clase anónima, funcionará bien. Puede inicializarlo a -1 para que el código se ejecute en la primera llamada.Encuentre su nombre de hilandero y busque la identificación, luego implemente este método.
fuente
No importa si configurará OnItemSelectedListener en onCreate o onStart; todavía se llamará durante la creación o el inicio de la Actividad (respectivamente).
Entonces podemos configurarlo en onCreate (y NO en onStart!).
Simplemente agregue una bandera para descubrir la primera inicialización:
luego en onCreate (o onCreateView) solo:
fuente
Los documentos para el widget spinner dice
Debe usar
setOnItemSelectedListener
para manejar su problema.fuente
fuente
tomar una variable global para la selección actual de spinner:
fuente
Si quieres un verdadero onChangedListener (). Almacene el valor inicial en el controlador y verifique si ha cambiado. Es simple y no requiere una variable global. Funciona si tienes más de una ruleta en la página.
...
Los objetos son tus amigos, úsalos.
fuente
fuente
Esto funcionará para inicializar la ruleta y findviewbyid y usar esto funcionará
fuente
La mejor forma de lo que creo que sería tener una
flagitemselected = 0;
enonCreate()
. Y el elemento seleccionado de la subasta caso de que la bandera es decirflagitemselected++
; y luego verificaEsto ayudará, supongo.
fuente
Un truco que encontré fue poner sus setOnItemSelectedListeners en onWindowFocusChanged en lugar de onCreate. Todavía no he encontrado ningún efecto secundario negativo al hacerlo de esta manera. Básicamente, configure los oyentes después de que se dibuje la ventana. No estoy seguro de con qué frecuencia se ejecuta onWindowFocusChanged, pero es bastante fácil crearse una variable de bloqueo si la encuentra ejecutándose con demasiada frecuencia.
Creo que Android podría estar usando un sistema de procesamiento basado en mensajes, y si lo pones todo en onCreate, es posible que te encuentres en situaciones en las que el spinner se llena después de que se dibuja. Por lo tanto, su oyente se disparará después de establecer la ubicación del elemento. Esta es una suposición educada, por supuesto, pero no dude en corregirme al respecto.
fuente
De forma predeterminada, obtendrá el primer elemento de la matriz giratoria a través de
cada vez que seleccionó el valor en la ruleta, esto le dará el valor seleccionado
si desea la posición del elemento seleccionado, hágalo así
las dos respuestas anteriores son para sin aplicar oyente
fuente