Spinner-anzeigen erste Element text, während andere Element ausgewählt ist
Ich habe einen Spinner, die voll ist von einem SimpleCursorAdapter in der onResume () - Methode. Die Auswahl ist auch in onResume: spinner.setSelection(x)
.
Wenn ich eine andere Tätigkeit und gehen Sie dann zurück zu dieser Tätigkeit, der Spinner zeigt den text des ersten Elements, statt den text des ausgewählten Elements.
Wie kann ich dieses Problem beheben?
EDIT: Hier ist mein code:
@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: Screenshot:
- Zeigen Sie Ihren code .
- Hinzugefügt mein code und screenshots.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern
spinner.setSelection(cursor.getPosition())
zuspinner.setSelection(cursor.getPosition(),true)
hat den trick.Kämpfte ich dieses gleiche problem auch.
hier ist, was ich schlage vor:
fügen Sie am Anfang der fillSpinner()
int spinnerDefault = 0;
als Nächstes fügen Sie Ihre Logik für die änderung der Auswahl vor der Einrichtung der spinner. verwenden Sie diese zum ändern spinnerDefault variable.
Dann direkt nach der Zeile:
spinner.setAdapter(adapter);
hinzufügen:
spinner.setSelection(spinnerDefault);
den Sie gesetzt haben, spinner.setSelection(0);
so wird es standardmäßig ersten Eintrag.