2010-07-03 76 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