在选择其他项目时,微调器显示第一个项目文本

时间:2012-08-28 13:04:34

标签: android spinner onresume

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

enter image description here

3 个答案:

答案 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);

因此默认情况下会显示第一项。