2010-07-03 19 views
7

Ich habe eine Ansicht mit einem Spinner. Die Aktivität startet einen weiteren Schritt mit einem Popup, in dem ich Werte, die der Elternteil im Spinner anzeigt, hinzufüge oder lösche. In onActivityResult() aktualisiere ich den Inhalt des Spinner, so dass es zusätzliche oder gelöschte Werte widerspiegelt, indem ich meine fillSpinner() -Methode aufruft. Der Parameter dieser Methode ist der zuvor gewählte Wert:Einen Spinner aktualisieren

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)); 
    } 
} 

Wenn ich die Spinner öffnen, enthält sie die richtige Liste (das heißt, es wurde aufgefrischt), und der korrekte Wert ausgewählt wird. Das Steuerelement Spinner selbst (in seinem geschlossenen Zustand) zeigt jedoch nicht den ausgewählten Wert, sondern den ersten in der Liste.

Wenn ich den Code im Debugger durchlaufen, ist der Wert Spinner vor und nach dem Aufruf von setSelection() korrekt (und es wird immer mit der gleichen richtigen ID aufgerufen). Da ich jedoch das Ereignis nicht verlassen kann, wenn ich die Ausführung nach einem kurzen Moment fortsetze, ändert sich der Wert im Spinner.

Mit anderen Worten, die angezeigte Zeichenfolge des Drehfelds wird geändert und unterscheidet sich von dem ausgewählten Element, wenn ich von meiner Popup-Aktivität zurückkomme.

Irgendwelche Ideen werden geschätzt.

Antwort

1

Das Problem, denke ich, lag daran, dass mein Cursor bei jedem Anruf neu erstellt wurde. Ich habe keine bessere Erklärung. This post wies mich indirekt in die richtige Richtung.

Indem ich den Cursor nach der ersten Erstellung festhielt, konnte ich requery() nur aufrufen, nachdem ich die Listendaten geändert hatte, anstatt die Methode in meiner Frage zu durchlaufen. Es funktioniert jetzt gut.

5

Ich habe eine einfache Lösung für dieses Problem gefunden: Verwenden Sie das Formular Spinner.setSelection (int position, Boolean NavigateTo), damit der Spinner das korrekte ausgewählte Element anzeigt.

Beispiel: Spin.setSelection (iPos, true);

Viel Glück.

+0

Danke! Arbeitete für mich. – Yellos

Verwandte Themen