Wie bekomme ich den Spinner-Wert?


263

In Android versuche ich, den ausgewählten Spinner-Wert mit einem Listener abzurufen.

Was ist der beste Weg, um den Wert des Spinners zu erhalten?

Antworten:


571
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();

11
"Wert" ist hier ziemlich vieldeutig. Dadurch wird der aktuelle Titel des Drehfeldelements abgerufen (wie in der Zeichenfolge, die dem Benutzer angezeigt wird), jedoch nicht dessen Wert, wenn Sie dem Drehfeld beispielsweise ein int-Array zugeordnet haben.
A. Steenbergen

1
@Doge, um den Wert eines ausgewählten Elements wie den Integer-Wert abzurufen, sollten wir beispielsweise int [] valuesArray erstellen und in der Funktion onCreate ablegen, möglicherweise aus arrays.xml, damit wir valuesArray [(int) mySpinner.getSelectedItemId ()] verwenden können, um den Integer-Wert abzurufen
Belal Mazlom

128

Der Spinner sollte ein "OnItemSelected" -Ereignis auslösen, wenn etwas ausgewählt ist:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        Object item = parent.getItemAtPosition(pos);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }
});

Danke - das hat funktioniert, obwohl ich den Methoden den Rückgabetyp void hinzufügen musste.
Sam Dutton

6
Gibt es wirklich keine Möglichkeit, dies zu erreichen, ohne sich auf die Position des Gegenstands zu verlassen?
Vinz

7
Keine sehr nützliche Lösung, wenn Sie den Spinner-Wert lesen möchten, ohne sich auf ein Auswahlereignis verlassen zu müssen.
AndroidDev

3
@Patrick Die Annotation Override ist niemals erforderlich. Sie teilt dem Compiler lediglich mit, ob Sie überprüfen können, ob diese Override korrekt durchgeführt wurde.
SiXoS

1
Wie wäre es, wenn Sie das standardmäßig ausgewählte Element erhalten, wenn keine Änderung daran vorgenommen wurde? @ Dodos ist die richtige.
Xtreme Biker

49

Angenommen, dies ist Ihre XML mit Spinner-Einträgen (dh Titeln) und Werten:

<resources>
    <string-array name="size_entries">
        <item>Small</item>
        <item>Medium</item>
        <item>Large</item>
    </string-array>

    <string-array name="size_values">
        <item>12</item>
        <item>16</item>
        <item>20</item>
    </string-array>
</resources>

und das ist dein Spinner:

<Spinner
    android:id="@+id/size_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:entries="@array/size_entries" />

Dann in Ihrem Code, um die Einträge zu erhalten:

Spinner spinner = (Spinner) findViewById(R.id.size_spinner);
String size = spinner.getSelectedItem().toString(); // Small, Medium, Large

und um die Werte zu erhalten:

int spinner_pos = spinner.getSelectedItemPosition();
String[] size_values = getResources().getStringArray(R.array.size_values);
int size = Integer.valueOf(size_values[spinner_pos]); // 12, 16, 20

Thx, dies sollte im offiziellen ANDR-Dokument über Spinner stehen, sie zeigten nur, dass sie über Listener einen Wert erhalten.
Visual

genau das, wonach ich suche
jet_choong

Perfekte Lösung! android:entriesmeinen Tag gerettet.
Coderpc


14
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();

12

Wenn Sie bereits wissen, dass es sich bei dem Artikel um einen handelt String, bevorzuge ich:

String itemText = (String) mySpinner.getSelectedItem();

toString()Einen anzurufen, von Objectdem Sie wissen, dass er Stringein eher umständlicher Weg ist, als nur den Objectzu werfen String.


2

füge setOnItemSelectedListener zur Spinnerreferenz hinzu und erhalte die Daten so`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.