我有一个Spinner,它由onResume()方法中的SimpleCursorAdapter填充。选择也在onResume中设置:spinner.setSelection(x)
。
当我转到另一个活动然后返回此活动时,微调器会显示第一个项目的文本,而不是所选项目的文本。
我该如何解决这个问题?
编辑:这是我的代码:
@Override
public void onResume(){
super.onResume();
fillSpinner();
}
private void fillSpinner() {
Db = new DbAdapter(this);
Db.open();
final Cursor cursor = Db.getCats(true,true);
startManagingCursor(cursor);
String[] from = new String[]{DbAdapter.KEY_NAME};
int[] to = new int[]{android.R.id.text1};
SimpleCursorAdapter adapter =
new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, from, to);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
cursor.moveToPosition(pos);
spinnerval = cursor.getInt(cursor.getColumnIndexOrThrow(DbAdapter._ID));
Log.d("spinnerval", spinnerval+"");
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
spinner.setSelection(0);
int now = hour*60*60+minute*60;
Log.d("fillSpinner","now="+now+" / "+now/60.0/60.0);
cursor.moveToFirst();
while(cursor.moveToNext()){
int s = cursor.getInt(cursor.getColumnIndexOrThrow(DbAdapter.KEY_START));
int e = cursor.getInt(cursor.getColumnIndexOrThrow(DbAdapter.KEY_END));
if(e<s){
if(now>s){
e+=24*60*60;
}
else{
s-=24*60*60;
}
}
if(s<=now&&e>now){
spinner.setSelection(cursor.getPosition());
}
}
Db.close();
spinner.invalidate();
}
EDIT2:屏幕截图:
答案 0 :(得分:2)
将spinner.setSelection(cursor.getPosition())
更改为spinner.setSelection(cursor.getPosition(),true)
就可以了。
答案 1 :(得分:2)
我也遇到了同样的问题。 这是我的建议:
在fillSpinner()的开头添加
int spinnerDefault = 0;
接下来在设置微调器之前添加用于更改选择的逻辑。用它来改变spinnerDefault变量。
然后就在这一行之后:
spinner.setAdapter(适配器);
添加:
spinner.setSelection(spinnerDefault);
答案 2 :(得分:0)
您已设置 spinner.setSelection(0);
因此默认情况下会显示第一项。