我有一个旋转器的视图。活动通过弹出窗口启动另一个活动,我在其中添加或删除父级在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));
}
}
当我打开微调器时,它包含正确的列表(即刷新它)并选择了正确的值。但是,Spinner控件本身(处于关闭状态)不显示所选值,而是列表中的第一个。
当我单步执行调试器中的代码时,Spinner值在调用setSelection()之前和之后都是正确的(并且始终使用相同的正确id调用它)。但是,由于我无法退出事件,当我在短时间内恢复执行后,Spinner中的值会发生变化。
换句话说,当我从弹出活动返回时,微调器显示的字符串已更改,并且与所选项目不同。
任何想法都表示赞赏。
答案 0 :(得分:5)
我找到了解决该问题的简单方法:使用Spinner.setSelection(int position,Boolean NavigateTo)表单让Spinner显示正确的选定项目。
示例:Spin.setSelection(iPos,true);
祝你好运。答案 1 :(得分:1)
我认为问题是由于我的光标在每次通话时都被重新创建。我没有更好的解释。 This post间接指出了我正确的方向。
通过在最初创建光标后保持光标,我能够在更改列表数据后调用requery(),而不是在我的问题中运行方法。现在工作正常。