Jak uzyskać wartość Spinnera?


263

W Androidzie próbuję uzyskać wybraną wartość Spinnera ze słuchaczem.

Jaki jest najlepszy sposób na uzyskanie wartości przędzarki?

Odpowiedzi:


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

11
„Wartość” jest tu dość dwuznaczna. Pobiera to bieżący tytuł elementu przędzarki (jak w ciągu, który jest wyświetlany użytkownikowi), ale nie jego wartość, jeśli na przykład zmapowałeś tablicę int na przędzarce.
A. Steenbergen,

1
@Doge, aby uzyskać wartość wybranego elementu, na przykład wartość całkowitą, na przykład powinniśmy utworzyć int [] wartościArray i zapisać go w funkcji onCreate, być może z arrays.xml, abyśmy mogli użyć wartościArArray [(int) mySpinner.getSelectedItemId ()], aby uzyskać wartość całkowitą
Belal mazlom

128

Błędnik powinien uruchomić zdarzenie „OnItemSelected”, gdy coś zostanie wybrane:

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) {
    }
});

Dzięki - działało, chociaż musiałem dodać do metod typ pustego zwrotu.
Sam Dutton,

6
Czy naprawdę nie ma sposobu na osiągnięcie tego bez polegania na pozycji przedmiotu?
Vinz

7
Niezbyt przydatne rozwiązanie, jeśli chcesz odczytać wartość pokrętła bez polegania na zdarzeniu wyboru.
AndroidDev,

3
@Patrick Zastąpienie adnotacji nigdy nie jest wymagane, mówi tylko kompilatorowi: „Czy możesz sprawdzić, czy to zastąpienie zostało wykonane poprawnie?”
SiXoS,

1
Co z uzyskaniem domyślnie wybranego elementu, gdy nie dokonano na nim żadnej zmiany? @ dodo jest najbardziej odpowiedni.
Xtreme Biker

49

Powiedz, że to twój xml z pozycjami pokrętła (tj. Tytułów) i wartościami:

<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>

a to jest twój spinner:

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

Następnie w kodzie, aby uzyskać wpisy:

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

i uzyskać wartości:

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

Dzięki, powinno to być w oficjalnym dokumencie ANDR na błystce, pokazały tylko uzyskiwanie wartości za pośrednictwem Listenera.
wizualne

właśnie tego szukam
jet_choong,

Idealne rozwiązanie! android:entriesuczyniło mój dzień.
coderpc

15

Tak, możesz zarejestrować słuchacza za pośrednictwem setOnItemSelectedListener(), jak pokazano tutaj .


Dzięki - to też zadziałało i (myślę) ułatwia odczytanie kodu.
Sam Dutton,

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

12

Jeśli już wiesz, że przedmiot jest String, wolę:

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

Dzwoniąc toString()na zasadzie Object, że wiesz, to Stringwydaje się bardziej okrężną ścieżką niż tylko odlewania Objectdo String.


2

dodaj setOnItemSelectedListener do odwołania przędzarki i uzyskaj takie dane`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.