style - fill spinner android
Establecer elemento seleccionado del hilandero mediante programaciĆ³n (17)
Estoy trabajando en un proyecto de Android y estoy usando una rueda giratoria que utiliza un adaptador de matriz que se rellena 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 el spinner tengo los siguientes elementos:
- Categoría 1
- Categoría 2
- Categoría 3
¿Cómo puedo hacer que la categoría 2 sea programáticamente 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 a este para Android.
La solución óptima es:
public String[] items= new String[]{"item1","item2","item3"};
// here you can use array or list
ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items);
final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner);
itemsSpinner.setAdapter(adapter);
para obtener la posición del artículo automáticamente agregue la siguiente declaración
itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));
¿Por qué no usa sus valores de la base de datos y los almacena en un ArrayList y luego solo usa:
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
Alguna explicación (al menos para Fragmentos, nunca probada con Actividad pura). Espero que ayude a alguien a entender mejor Android.
La respuesta más popular de Arun George es correcta, pero no funciona en algunos casos.
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 :
@Override
public void onResume() {
super.onResume();
yourSpinner.setSelection(pos);
}
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 puede hacer lo que quiera con ningún método, oops :(, los componentes pueden no estar listos. Como otro ejemplo, no puede desplazarse ScrollView ni en onCreateView () ni en onResume () ( ver la respuesta here )
En mi caso, este código me salvó el día:
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SpinnerAdapter adapter = spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
Esto es trabajo para mí.
spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
Esto funcionó para mí:
@Override
protected void onStart() {
super.onStart();
mySpinner.setSelection(position);
}
Es similar a la solución de @ sberezin pero llamando a setSelection () en onStart ().
Ninguna de estas respuestas me dio la solución, solo funcionó con esto:
mySpinner.post(new Runnable() {
@Override
public void run() {
mySpinner.setSelection(position);
}
});
Para encontrar un valor y seleccionarlo:
private void selectValue(Spinner spinner, Object value) {
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).equals(value)) {
spinner.setSelection(i);
break;
}
}
}
Puede configurar fácilmente así: spinner.setSelection (1), en lugar de 1, puede establecer cualquier posición de la lista que desee mostrar.
Puede hacer un método genérico para este tipo de trabajo como lo hago en mi clase de utilidad que es
public void SetSpinnerSelection(Spinner spinner,String[] array,String text) {
for(int i=0;i<array.length;i++) {
if(array[i].equals(text)) {
spinner.setSelection(i);
}
}
}
Sé que ya está respondido, pero un código simple para seleccionar un elemento, muy simple:
spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
Si tienes una lista de contactos puedes ir para esto:
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
Tengo un SimpleCursorAdapter, así que tengo que duplicar los datos para usar la respuesta en esta publicación. Por lo tanto, te recomiendo que pruebes de esta manera:
for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) {
if (spinnerRegion.getItemIdAtPosition(i) == Integer
.valueOf(signal.getInt(signal
.getColumnIndexOrThrow("id_region")))) {
spinnerRegion.setSelection(i);
break;
}
}
Creo que es una manera real.
Esto se indica en los comentarios en otras partes de esta página, pero le pareció útil extraerlo en una respuesta:
Cuando uso un adaptador, he encontrado que spinnerObject.setSelection(INDEX_OF_CATEGORY2)
debe ocurrir después de la llamada a setAdapter
; de lo contrario, el primer elemento es siempre la selección inicial.
// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);
Esto se confirma al revisar el code de setAdapter
para setAdapter
.
Utilice lo siguiente: spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.
for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
spRaca.setSelection(x);
break;
}
}
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
Puedes usar lo anterior como:
selectSpinnerItemByValue(spinnerObject, desiredValue);
Y, por supuesto, también puede seleccionar por índice directamente como
spinnerObject.setSelection(index);