2010-07-03 147 views
7

我有一個微調視圖。該活動通過彈出式窗口添加或刪除父項在Spinner中顯示的值來啓動另一個活動。 因此,在onActivityResult()中,我通過調用我的fillSpinner()方法來刷新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)); 
    } 
} 

當我打開微調,它包含正確的列表(即,它被刷新),並且選擇正確的值。但是,微調控制器本身(處於關閉狀態)不顯示選定的值,而是顯示列表中的第一個值。

當我調試調試器中的代碼時,在我調用setSelection()(並且始終使用相同的正確ID)調用之前和之後,Spinner值是正確的。但是,由於我無法退出該事件,因此在短時間後恢復執行時,Spinner中的值會發生變化。

換句話說,當我從彈出式活動返回時,微調控件的顯示字符串發生了變化,與選定的項目不同。

任何想法表示讚賞。

回答

1

我想這個問題是由於我的光標在每次調用時都被重新創建。我沒有更好的解釋。 This post間接地指出我在正確的方向。

通過在初始創建它之後按住遊標,我可以在更改列表數據後調用requery(),而不是在我的問題中運行該方法。現在它工作正常。

5

我找到了一個簡單的解決方案:使用表單Spinner.setSelection(int position,Boolean NavigateTo)讓Spinner顯示正確的選定項目。

示例:Spin.setSelection(iPos,true);

祝你好運。

+0

謝謝!爲我工作。 – Yellos 2012-08-28 13:55:13