2

onResume() メソッド内に SimpleCursorAdapter で埋められた Spinner があります。選択は 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

私もこの同じ問題と戦いました。ここに私が提案するものがあります:

fillSpinner() の先頭に追加

int spinnerDefault = 0;

次に、スピナーを設定する前に、選択を変更するためのロジックを追加します。これを使用して spinnerDefault 変数を変更します。

次に、行の直後:

spinner.setAdapter(アダプター);

追加:

spinner.setSelection(spinnerDefault);

于 2012-08-28T14:11:50.553 に答える
2

に変更spinner.setSelection(cursor.getPosition())するとspinner.setSelection(cursor.getPosition(),true)うまくいきました。

于 2012-08-28T13:53:11.840 に答える
0

spinner.setSelection(0);を設定しました。

したがって、デフォルトで最初のアイテムが表示されます。

于 2012-08-28T13:24:02.290 に答える