2010-07-03 24 views
7

Tengo una vista con una ruleta. La actividad inicia otra actividad con una ventana emergente donde agrego o elimino valores que el padre muestra en el Spinner. Por lo tanto, en onActivityResult(), actualizo el contenido del Spinner para que refleje cualquier valor adicional o eliminado llamando al método fillSpinner(). El parámetro de este método es el valor previamente seleccionado:Refreshing a Spinner

private void fillSpinner(String value){ 

    Cursor c = mDbHelper.getAllCategories(); 
    startManagingCursor(c); 
    c.moveToFirst(); 

    String[] from = new String[]{DBAdapter.KEY_CATEGORY};  
    SimpleCursorAdapter scCats = new SimpleCursorAdapter(
     this, android.R.layout.simple_spinner_item,c,from, 
      new int[]{android.R.id.text1}); 
    scCats.setDropDownViewResource(
     android.R.layout.simple_spinner_dropdown_item); 
    category.setAdapter(scCats); 

    if (value != null && value != "") { 
     category.setSelection((int)mDbHelper.categoryIndex(value)); 
    } 
} 

Al abrir la Spinner, que contiene la lista correcta (es decir, se actualiza) y se selecciona el valor correcto. Sin embargo, el control de Spinner en sí mismo (en su estado cerrado) no muestra el valor seleccionado, sino el primero en la lista.

Cuando paso por el código en el depurador, el valor de Spinner es correcto antes y después de llamar a setSelection() (y siempre se llama con la misma identificación correcta). Sin embargo, como no puedo salir del evento, cuando reanudo la ejecución después de un breve momento, el valor en el Spinner cambia.

En otras palabras, la cadena visualizada del giradiscos se cambia y es diferente del elemento seleccionado cuando regreso de mi actividad emergente.

Se aprecian todas las ideas.

Respuesta

1

El problema, creo, se debe a que mi cursor se recrea en cada llamada. No tengo una mejor explicación. This post indirectamente me señaló en la dirección correcta.

Al mantener presionado el cursor después de crearlo inicialmente, pude simplemente llamar a requery() después de cambiar los datos de la lista, en lugar de ejecutar el método en mi pregunta. Funciona bien ahora.

5

Encontré una solución simple a ese problema: Use el formulario Spinner.setSelection (int position, Boolean NavigateTo) para que el Spinner muestre el elemento seleccionado correcto.

Ejemplo: Spin.setSelection (iPos, true);

Buena suerte.

+0

¡Gracias! Trabajó para mi. – Yellos