Tengo una vista de actualización, donde necesito preseleccionar el valor almacenado en la base de datos para un Spinner.
Tenía en mente algo como esto, pero Adapter
no tiene ningún indexOf
método, así que estoy atascado.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
Una forma sencilla de configurar la ruleta en función del valor es
El camino hacia el código complejo ya está allí, esto es mucho más claro.
fuente
break;
cuando se encuentra el índice para acelerar el proceso.0
eso, debe regresar-1
si no se encuentra el valor, como se muestra en mi respuesta: stackoverflow.com/a/32377917/1617737 :-)0
como escenario de respaldo. Si configura-1
, qué elemento sería visible en la ruleta, supongo que el elemento 0 del adaptador de la ruleta, agregando -1 también agrega sobrepeso al verificar si el valor es -1 o no, porque la configuración -1 causará una excepción.Mantengo una ArrayList separada de todos los elementos en mis Spinners. De esta manera puedo hacer indexOf en ArrayList y luego usar ese valor para establecer la selección en el Spinner.
fuente
Basado en la respuesta de Merrill , se me ocurrió esta solución de línea única ... no es muy bonita, pero puedes culpar a quien mantiene el código
Spinner
por descuidar la inclusión de una función que hace esto por eso.Recibirás una advertencia sobre cómo
ArrayAdapter<String>
se desmarca el lanzamiento de a ... en realidad, puedes usar unArrayAdapter
como Merrill, pero eso solo cambia una advertencia por otra.fuente
Si está utilizando una matriz de cadenas, esta es la mejor manera:
fuente
Puedes usar esto también,
fuente
Si necesita tener un método indexOf en cualquier adaptador antiguo (y no conoce la implementación subyacente), puede usar esto:
fuente
Basado en la respuesta de Merrill aquí está cómo hacer con un CursorAdapter
fuente
Use la siguiente línea para seleccionar usando el valor:
fuente
Estoy usando un adaptador personalizado, para eso este código es suficiente:
Entonces, su fragmento de código será así:
fuente
Este es mi método simple para obtener el índice por cadena.
fuente
Puede usarlo de esta manera, simplemente haga su código más simple y más claro.
Espero eso ayude.
fuente
aqui esta mi solucion
y getItemIndexById a continuación
¡Espero que esto ayude!
fuente
Aquí se explica cómo hacerlo si está utilizando un
SimpleCursorAdapter
(dondecolumnName
está el nombre de la columna de base de datos que utilizó para completar suspinner
):Además (un refinamiento de la respuesta de Akhil ), esta es la forma correspondiente de hacerlo si está llenando su Spinner desde una matriz:
fuente
Si establece una matriz XML en la ruleta en el diseño XML, puede hacer esto
fuente
En realidad, hay una manera de obtener esto usando una búsqueda de índice en el Adaptador de matriz y todo esto se puede hacer con reflexión. Incluso fui un paso más allá, ya que tenía 10 Spinners y quería establecerlos dinámicamente desde mi base de datos y la base de datos contiene el valor solo no el texto, ya que el Spinner realmente cambia semana a semana, por lo que el valor es mi número de identificación de la base de datos.
Aquí está la búsqueda indexada que puede usar en casi cualquier lista siempre que los campos estén en el nivel superior del objeto.
El método de conversión que se puede crear para todas las primitivas aquí es uno para string e int.
fuente
Para hacer que la aplicación recuerde los últimos valores de flecha seleccionados, puede usar el siguiente código:
El siguiente código lee el valor de la ruleta y establece la posición de la ruleta en consecuencia.
Y ponga el siguiente código donde sepa que están presentes los últimos valores de la ruleta, o en otro lugar, según sea necesario. Este código básicamente escribe el valor de la ruleta en SharedPreferences.
fuente
Tuve el mismo problema al intentar seleccionar el elemento correcto en una rueda giratoria poblada con un cursorLoader. Recuperé la identificación del elemento que quería seleccionar primero de la tabla 1 y luego utilicé un CursorLoader para llenar la ruleta. En onLoadFinished hice un ciclo a través del cursor que llena el adaptador de la ruleta hasta que encontré el elemento que coincidía con la identificación que ya tenía. Luego asignó el número de fila del cursor a la posición seleccionada de la ruleta. Sería bueno tener una función similar para pasar la identificación del valor que desea seleccionar en la ruleta al completar los detalles en un formulario que contiene los resultados guardados de la ruleta.
fuente
Como algunas de las respuestas anteriores son muy correctas, solo quiero asegurarme de que ninguno de ustedes caiga en este problema.
Si establece los valores en el
ArrayList
usoString.format
, DEBE obtener la posición del valor utilizando la misma estructura de cadenaString.format
.Un ejemplo:
Debe obtener la posición del valor necesario de esta manera:
De lo contrario, obtendrás el
-1
artículo no encontrado.Solía
Locale.getDefault()
por el idioma árabe .Espero que te sea útil.
fuente
Aquí está mi solución con suerte completa. Tengo la siguiente enumeración:
utilizado en la siguiente clase
Código para establecer el spinner por HTTPMethod enum-member:
Donde
R.id.spinnerHttpmethod
se define en un archivo de diseño, yandroid.R.layout.simple_spinner_item
es entregado por android-studio.fuente
fuente
muy simple solo use
getSelectedItem();
p.ej :
el método anterior devuelve un valor de cadena
en el anterior el
R.array.admin_type
es un archivo de recursos de cadena en valoressolo cree un archivo .xml en valores >> cadenas
fuente
Suponga que necesita llenar la ruleta desde el conjunto de cadenas desde el recurso, y desea mantener seleccionado el valor del servidor. Por lo tanto, esta es una forma de establecer un valor seleccionado del servidor en la ruleta.
¡Espero eso ayude! PD: el código está en Kotlin!
fuente
Como necesitaba algo, que también funciona con la localización , se me ocurrieron estos dos métodos:
Como puede ver, también me topé con la complejidad adicional de la distinción entre mayúsculas y minúsculas entre arrays.xml y la
value
que estoy comparando. Si no tiene esto, el método anterior se puede simplificar a algo como:return arrayValues.indexOf(value);
Método auxiliar estático
fuente
debe pasar su adaptador personalizado con una posición como REPEAT [posición]. y funciona correctamente
fuente