2010-07-03 14 views
7

Ho una vista con uno spinner. L'attività inizia un'altra acvitity con un popup in cui aggiungo o elimina i valori mostrati dal genitore nello Spinner. Quindi, in onActivityResult() aggiorno il contenuto dello Spinner in modo che rifletta tutti i valori aggiuntivi o cancellati, chiamando il mio metodo fillSpinner(). Il parametro di questo metodo è il valore precedentemente selezionato: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)); 
    } 
} 

Quando si apre la Spinner, contiene l'elenco corretto (cioè esso era rinvigoriti) e viene selezionato il valore corretto. Tuttavia, il controllo Spinner stesso (nel suo stato chiuso) non mostra il valore selezionato, ma il primo della lista.

Quando passo il codice nel debugger, il valore dello Spinner è corretto prima e dopo chiamo setSelection() (e viene sempre chiamato con lo stesso ID corretto). Tuttavia, poiché non posso uscire dall'evento, quando riprendo l'esecuzione dopo un breve momento il valore nello Spinner cambia.

In altre parole, la stringa visualizzata dello spinner viene modificata ed è diversa dall'elemento selezionato quando torno dall'attività popup.

Tutte le idee sono apprezzate.

risposta

1

Il problema, penso, era dovuto al fatto che il mio cursore veniva ricreato ad ogni chiamata. Non ho una spiegazione migliore. This post indirettamente mi ha indirizzato nella giusta direzione.

Mantenendo premuto il cursore dopo averlo creato inizialmente, sono riuscito a chiamare semplicemente requery() dopo aver modificato i dati dell'elenco, anziché eseguire il metodo nella mia domanda. Funziona bene ora.

5

Ho trovato una soluzione semplice a questo problema: utilizzare il modulo Spinner.setSelection (posizione int, Boolean NavigateTo) per fare in modo che lo Spinner mostri l'elemento selezionato corretto.

Esempio: Spin.setSelection (iPos, true);

Buona fortuna.

+0

Grazie! Ha funzionato per me – Yellos