Estoy trabajando en un proyecto de Android y estoy usando un spinner que usa un adaptador de matriz que se completa desde la base de datos.
No puedo averiguar cómo puedo configurar el elemento seleccionado mediante programación de la lista. Por ejemplo si, en la ruleta tengo los siguientes elementos:
- Categoría 1
- Categoría 2
- Categoría 3
¿Cómo haría programáticamente la Categoría 2 como el elemento seleccionado cuando se crea la pantalla? Estaba pensando que podría ser similar a c # IE Spinner.SelectedText = "Categoría 2" pero no parece haber ningún método similar para Android.
spinner.setSelection()
. Eso funcionaría bien. También puede crear un método que pueda ayudarlo a hacer coincidir sus índices con sus cadenas reales.Respuestas:
Usar el siguiente:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.fuente
mySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
Ninguna de estas respuestas me dio la solución, solo funcionó con esto:
fuente
Puede usar lo anterior como:
y, por supuesto, también puede seleccionar por índice directamente como
fuente
Category 2
cual supongo que es una cadena (suponiendo que haya intentado usarSpinner.SelectedText = "Category 2"
), pero el código anterior es para along
.adapter.getItem(position)
, noadapter.getItemId(position)
.Alguna explicación (al menos para Fragmentos, nunca probé con Actividad pura). Espero que ayude a alguien a comprender mejor Android.
La respuesta más popular de Arun George es correcta, pero en algunos casos no funciona.
La respuesta de Marco HC utiliza Runnable, que es un último recurso debido a la carga adicional de la CPU.
La respuesta es: simplemente debe elegir el lugar correcto para llamar a setSelection () , por ejemplo, me funciona :
Pero no funcionará en onCreateView () . Sospecho que esa es la razón del interés en este tema.
El secreto es que con Android no puedes hacer lo que quieras con ningún método - oops :( - los componentes pueden no estar listos. Como otro ejemplo, no puedes desplazar ScrollView ni en onCreateView () ni en onResume () ( mira la respuesta aquí )
fuente
Para buscar un valor y seleccionarlo:
fuente
¿Por qué no usa sus valores de la base de datos y los almacena en una ArrayList y luego solo usa:
fuente
La solución óptima es:
Para obtener la posición del elemento, agregue automáticamente la siguiente declaración
fuente
Puede hacer un método genérico para este tipo de trabajo como lo hago en mi UtilityClass que es
fuente
Puede configurarlo fácilmente de esta manera: en
spinner.setSelection(1)
lugar de 1, puede configurar cualquier posición de la lista que le gustaría mostrar.fuente
Tengo un SimpleCursorAdapter, así que tengo que duplicar los datos para usar el respose en esta publicación. Por lo tanto, te recomiendo que pruebes de esta manera:
Creo que es una forma real
fuente
Esto es trabajo para mi.
fuente
Si tiene una lista de contactos, puede ir para esto:
fuente
Sé que ya está respondido, pero código simple para seleccionar un elemento, muy simple:
fuente
fuente
Esto se afirma en los comentarios en otra parte de esta página, pero consideró útil obtener una respuesta:
Cuando uso un adaptador, descubrí que las
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
necesidades deben ocurrir después de lasetAdapter
llamada; de lo contrario, el primer elemento siempre es la selección inicial.Esto se confirma al revisar el código AbsSpinner para
setAdapter
.fuente
Esto es lo que uso en Kotlin:
fuente
indexOf
no puede hacer una coincidencia, entonces regresa-1
, lo que parece dar como resultado que el valor predeterminado sea el seleccionado porspinner.setSelection
. Estoy bien con eso.En mi caso, este código me salvó el día:
fuente
La mayoría de las veces
spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
no funciona. Si solo llamasspinner.setSelection(i);
Depende de tu lógica.
Si la vista está completamente cargada y desea llamarla desde la interfaz, le sugiero que llame
O si desea cambiar entre el ciclo de vida de la actividad / fragmento, llame así
fuente
Había hecho alguna función de extensión
Spinner
para cargar datos y rastrear la selección de elementos.Spinner.kt
Ejemplo de uso
fuente
Esto funcionó para mí:
Es similar a la solución de @ sberezin pero llamando a setSelection () en onStart ().
fuente
Tuve el mismo problema desde ayer. Desafortunadamente, el primer elemento de la lista de la matriz se muestra de forma predeterminada en el widget giratorio. Un cambio sería encontrar el elemento seleccionado anteriormente con cada elemento en la lista de la matriz e intercambiar su posición con el primer elemento. Aquí está el código.
fuente