style - java android spinner
Android: setSelection no tiene efecto en Spinner (10)
La solución es llamar a setSelection (my_pos, true). Observe el segundo parámetro.
No lo olvide, si llama animado, configure los parámetros de diseño, entonces :) Ejemplo:
LinearLayout.LayoutParams spinnerLp = (LinearLayout.LayoutParams) spinner.getLayoutParams();
spinner.setSelection(selectedPositionAge, true);
spinnerLp.gravity = Gravity.CENTER;
spinner.setLayoutParams(spinnerLp);
los acolchados ajustados manualmente al rotor deben ser reseteados manualmente
Tengo un problema con setSelection en un Spinner. Establecí el valor que se preseleccionará cuando se muestre el rotador en el código, pero no tiene ningún efecto y siempre se selecciona la primera alternativa en la lista. El código se ve así:
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = li.inflate(R.layout.edit_event, null);
...
ArrayList<String> routes = new ArrayList<String>();
// routes filled with values at runtime
...
ArrayAdapter<String> aa = new ArrayAdapter<String>(GOFdroid.this, android.R.layout.simple_spinner_item, routes);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner destSpinner = (Spinner) dialogView.findViewById(R.id.edit_event_destination);
String dest = events.get(pos).getDestination();
int routesPos = routes.indexOf(dest);
Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
destSpinner.setSelection(routesPos);
destSpinner.setAdapter(aa);
El código funciona como estaba previsto excepto para la parte setSelection, y no puedo entender por qué.
El diseño XML de la ruleta se ve así (no el diseño completo, solo la parte giratoria):
// DESTINATION
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Destination:" />
<Spinner
android:id="@+id/edit_event_destination"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/choose_dest"
android:layout_marginBottom="10dip"
android:text="" />
¡Se aprecia mucho la ayuda!
Linus
En mi caso, ninguna de las respuestas funcionó, así que puse en cola setSelection a través de un Handler
new Handler().postDelayed(new Runnable() {
public void run() {
mSpinner.setSelection(1);
}
}, 100);
Hacer esto podría causar problemas cuando se ejecuta en dispositivos lentos, pero estoy trabajando para un dispositivo específico, así que está bien usar este truco
Intente mover la llamada a setSelection()
después de la llamada a setAdapter()
.
Ninguna de las respuestas anteriores funcionó para mí. Lo que funcionó, sin embargo, fue crear la variable de instancia mSpinner
en el método onCreateView()
de mi fragmento (o, supongo, el método ''onCreate ()'' de tu actividad), y luego hacer esto en mi método onLoadFinished()
...
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
mSpinner.setSelection(mSelectedIndex);
}
Puede intentar
mSpinner.post(new Runnable() {
public void run() {
mSpinner.setSelection(1);
}
});
esto publicará la acción ejecutable para ejecutar tan pronto como se cree la vista
Tuve el mismo problema con un spinner dentro de un fragment : setSelection
funciona correctamente durante onCreate
en el primer inicio de la actividad, pero no cuando giro la pantalla. Lo resolví llamando a setSelection
dentro del método onViewStateRestored
del fragmento en lugar de llamarlo dentro del método onCreate
. No estoy seguro, pero creo que no puede usar setSelection
hasta que la vista esté completamente cargada, incluso si puede encontrar findViewById
.
Tuve un problema similar. ¡En mi caso setAdaper
y setSelection
estaban en el orden correcto! El formulario ejecutado onCreate
funcionó, pero cuando se ejecutó desde onResume
no tuvo ningún efecto.
La solution es llamar a setSelection(my_pos, true)
. Observe el segundo parámetro.
prueba esto, funcionó para mí:
Spinner destSpinner = (Spinner)dialogView.findViewById(R.id.edit_event_destination);
destSpinner.setSelection(0);
String dest = events.get(pos).getDestination();
int routesPos = routes.indexOf(dest);
destSpinner.setAdapter(aa);
Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
destSpinner.setSelection(routesPos);
utilizar esta
sp2.setAdapter(sp2.getAdapter());
sp2.getAdapter().notifyDataSetChanged();
sp2.setSelection(0, false);
Spinner.setSelection()
no funciona si lo llamas antes de Spinner.setAdapter()
Intenta llamar a setSelection()
después de la llamada a setAdapter ().
Motivo Detrás de esto : cuando llamas a Spinner.Selection()
antes de configurar un adaptador simplemente significa que estás tratando de configurar spinner a índice personalizado mediante setSelection () cuando no contiene ningún dato o podemos decir que ese spinner tiene un máximo item = 0.
entonces setSelection(1)
significa establecer el índice en 1 para spinner que tiene max item = 0; Aunque el propio spinner maneja esto fuera deBoundIndex para que su aplicación no falle.
la llamada a SetSelection()
debería ser posterior a setAdapter () solamente
Además, si tiene Spinner.SetOnItemSelectedListener()
y tiene un problema, onItemSelected(AdapterView<?> parent, View view, int position, long id)
se activa con position value = 0 cuando se carga la actividad y luego debe usar este patrón.
Spinner.SetAdapter()
Spinner.setSelection();
Spinner.setOnItemSelectedListener();