2

我有一个 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:截图:

在此处输入图像描述

4

3 回答 3

2

更改spinner.setSelection(cursor.getPosition())spinner.setSelection(cursor.getPosition(),true)成功了。

于 2012-08-28T13:53:11.840 回答
2

我也解决了同样的问题。这是我的建议:

在 fillSpinner() 的开头添加

int spinnerDefault = 0;

接下来在设置微调器之前添加更改选择的逻辑。使用它来更改 spinnerDefault 变量。

然后在该行之后:

spinner.setAdapter(适配器);

添加:

spinner.setSelection(spinnerDefault);

于 2012-08-28T14:11:50.553 回答
0

你已经设置了 spinner.setSelection(0);

所以它会默认显示第一项。

于 2012-08-28T13:24:02.290 回答