Como obter o valor do Spinner?


263

No Android, estou tentando obter o valor do Spinner selecionado com um ouvinte.

Qual é a melhor maneira de obter o valor do girador?

Respostas:


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

11
"Valor" é bastante ambíguo aqui. Isso recupera o título do item atual do girador (como em, a String que é exibida para o usuário), mas não seu valor, se você mapeou uma matriz int no girador, por exemplo.
A. Steenbergen

1
@Doge para obter valor do item selecionado como valor inteiro, por exemplo, devemos criar int [] valuesArray e arquivá-lo na função onCreate, talvez a partir de arrays.xml, para que possamos usar valuesArray [(int) mySpinner.getSelectedItemId ()] para obter valor inteiro
Belal mazlom

128

O Spinner deve disparar um evento "OnItemSelected" quando algo é selecionado:

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

Obrigado - funcionou, embora eu precisasse adicionar o tipo de retorno nulo aos métodos.
Sam Dutton

6
Não há realmente nenhuma maneira de conseguir isso sem depender da posição do item?
Vinz

7
Não é uma solução muito útil se você deseja ler o valor do girador sem depender de um evento de seleção.
AndroidDev

3
@Patrick A substituição de anotação nunca é necessária, apenas informa ao compilador "Você pode verificar se essa substituição foi feita corretamente?"
SiXoS

1
Que tal obter o item selecionado padrão quando nenhuma alteração foi realizada nele? O de @ dodo é o mais adequado.
Xtreme Biker

49

Digamos que este seja seu xml com entradas giratórias (ou seja, títulos) e valores:

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

e este é o seu spinner:

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

Em seguida, no seu código para obter as entradas:

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

e para obter os valores:

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, isso deve estar no documento oficial da ANDR no spinner, eles só mostraram obtenção de valor via Listener.
visual

este exatamente o que eu procurando
jet_choong

Solução perfeita! android:entriesfez o meu dia.
Coderpc 16/10/19

15

Sim, você pode registrar um ouvinte via setOnItemSelectedListener(), como é demonstrado aqui .


Obrigado - isso funcionou também e (acho) facilita a leitura do código.
Sam Dutton

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

12

Se você já sabe que o item é a String, prefiro:

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

Chamar toString()um Objectque você conhece é um Stringcaminho mais indireto do que apenas lançar o Objectpara String.


2

adicione setOnItemSelectedListener à referência do spinner e obtenha os dados assim`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.