470 Stimmen

Ausgewähltes Element des Spinners programmatisch einstellen

Ich arbeite an einem Android-Projekt und ich verwende einen Spinner, der einen Array-Adapter verwendet, der aus der Datenbank gefüllt wird.

Ich kann nicht herausfinden, wie ich das ausgewählte Element in der Liste programmatisch festlegen kann. Zum Beispiel, wenn ich in der Drehscheibe die folgenden Elemente habe:

  • Kategorie 1
  • Kategorie 2
  • Kategorie 3

Wie kann ich programmatisch die Kategorie 2 zum ausgewählten Element machen, wenn der Bildschirm erstellt wird? Ich dachte, es könnte ähnlich wie c# I.E Spinner.SelectedText = "Kategorie 2" sein, aber es scheint keine Methode ähnlich wie diese für Android zu sein.

893voto

Arun George Punkte 18052

Verwenden Sie das Folgende: spinnerObject.setSelection(INDEX_OF_CATEGORY2) .

99voto

Marco Hernaiz Punkte 5762

Keine dieser Antworten gab mir die Lösung, nur das hier funktionierte:

mySpinner.post(new Runnable() {
    @Override
    public void run() {
        mySpinner.setSelection(position);
    }
});

46voto

Yaqub Ahmad Punkte 27316
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
    SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
    for (int position = 0; position < adapter.getCount(); position++) {
        if(adapter.getItemId(position) == value) {
            spnr.setSelection(position);
            return;
        }
    }
}

Sie können die obigen Angaben wie folgt verwenden:

selectSpinnerItemByValue(spinnerObject, desiredValue);

& Natürlich können Sie auch direkt nach Index auswählen, wie

spinnerObject.setSelection(index);

34voto

sberezin Punkte 3186

Einige Erklärungen (zumindest für Fragmente - ich habe es nie mit reiner Aktivität versucht). Hoffentlich hilft es jemandem, Android besser zu verstehen.

Beliebteste Antwort von Arun George ist korrekt, funktioniert aber in manchen Fällen nicht.
Die Antwort von Marco HC verwendet Runnable, was aufgrund der zusätzlichen CPU-Belastung die letzte Möglichkeit darstellt.

Die Antwort ist: Sie sollten einfach die richtige Stelle für den Aufruf von setSelection() wählen zum Beispiel Werke für mich:

@Override
public void onResume() {
    super.onResume();

    yourSpinner.setSelection(pos);
 }

Aber es wird nicht in onCreateView() funktionieren . Ich vermute, das ist der Grund für das Interesse an diesem Thema.

Das Geheimnis ist, dass man bei Android nicht alles, was man will, in jeder Methode machen kann - oops:( - die Komponenten sind vielleicht einfach noch nicht fertig. Als weiteres Beispiel - Sie können ScrollView weder in onCreateView() noch in onResume() scrollen (siehe die Antwort aquí )

19voto

Ferran Maylinch Punkte 10139

So suchen Sie einen Wert und wählen ihn aus:

private void selectValue(Spinner spinner, Object value) {
    for (int i = 0; i < spinner.getCount(); i++) {
        if (spinner.getItemAtPosition(i).equals(value)) {
            spinner.setSelection(i);
            break;
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X