Establecer el elemento seleccionado de la hiladora mediante programación
Estoy trabajando en un proyecto de androide y estoy utilizando una ruleta que utiliza un adaptador de matriz que se rellena de la base de datos.
No puedo averiguar cómo puedo establecer el elemento seleccionado mediante programación de la lista. Por ejemplo, si en la ruleta tengo los siguientes elementos:
- Cómo hacer una fecha spinner en Android
- Cómo mover la flecha giratoria de Android Spinner más cerca de la que está emitiendo texto
- ¿Cómo obtener una devolución de llamada cuando se desactiva un diálogo emergente de Spinner?
- ¿Cómo hacer una lista emergente como un hilandero sin el hilador en androide?
- Android Spinner Gravity No funciona
- Categoría 1
- Categoría 2
- Categoría 3
Cómo programaré por favor la categoría 2 el artículo seleccionado cuando se crea la pantalla. Yo 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 esto para Android.
- Creación y vinculación de programas de Android Spinners en MvvmCross
- Tamaño del texto de un spinner
- ¿Diversas vistas para el artículo del hilandero y del hilandero?
- Android: Change Spinner Dropdown ver más
- Android hiladora ABIERTA con un solo clic de botón
- Cómo agregar una pista en spinner en XML
- Rellenando Spinner con SimpleAdapter en Android
- Spinner con ArrayAdapter personalizado para objetos que no muestran el elemento seleccionado
Utilice lo siguiente: spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.
Ninguna de estas respuestas me dio la solución, sólo trabajó con esto:
mySpinner.post(new Runnable() { @Override public void run() { mySpinner.setSelection(position); } });
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; } } }
Puede utilizar lo anterior como:
selectSpinnerItemByValue(spinnerObject, desiredValue);
Y por supuesto también puede seleccionar por índice directamente como
spinnerObject.setSelection(index);
Alguna explicación (al menos para Fragmentos – nunca probado con Actividad pura). Espero que ayude a alguien a entender Android mejor.
La respuesta más popular de Arun George es correcta, pero no funcionan 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 – usted debe simplemente elegir el lugar correcto para llamar a setSelection () , por ejemplo funciona para mí:
@Override public void onResume() { super.onResume(); yourSpinner.setSelection(pos); }
Pero no funcionará en onCreateView () . Sospecho que es la razón del interés por este tema.
El secreto es que con Android no puedes hacer nada que quieras en ningún método – oops 🙁 – los componentes pueden simplemente no estar listos.Como otro ejemplo – no se puede desplazar ScrollView ni en onCreateView () ni en onResume () Ver la respuesta aquí )
Para buscar 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; } } }
¿Por qué no utiliza sus valores de la base de datos y los almacena en una ArrayList y luego simplemente usa:
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
Usted puede hacer un método genérico para este tipo de trabajo como lo hago en mi UtilityClass 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); } } }
Tengo un SimpleCursorAdapter así que tengo que duplicar los datos para utilizar el respose en esta entrada. Por lo tanto, te recomiendo que intentes 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
Usted puede fijar fácilmente como esto: spinner.setSelection (1), en vez de 1, usted puede fijar cualquier posición de la lista que usted quisiera demostrar.
Si tiene una lista de contactos, puede ir a esto:
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
Sé que ya está contestada, pero código simple para seleccionar un elemento, muy simple:
spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
for (int x = 0; x < spRaca.getAdapter().getCount(); x++) { if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) { spRaca.setSelection(x); break; } }
Esto es trabajo para mí.
spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
En mi caso, este código guardó mi 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 funcionó para mí:
@Override protected void onStart() { super.onStart(); mySpinner.setSelection(position); }
Es similar a la solución @sberezin, pero llama a setSelection () en onStart ().
- Cómo determinar cuándo Fragmento se vuelve visible en ViewPager
- Android: deshabilitar resaltado en listView haz clic