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?

Sam Dutton
quelle

Antworten:

571
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();
Dodo
quelle
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) {
    }
});
Erich Douglass
quelle
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
lenooh
quelle
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
15

Ja, Sie können einen Listener über registrieren setOnItemSelectedListener(), wie hier gezeigt wird .

CommonsWare
quelle
Danke - das hat auch funktioniert und (glaube ich) erleichtert das Lesen des Codes.
Sam Dutton
14
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();
Gilix
quelle
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.

Matt Logan
quelle
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();
wafaa hilmy
quelle