Android: crie spinner programaticamente a partir da matriz


198

Sou novo no Android e estou tentando criar um spinner programaticamente e alimentá-lo com dados de uma matriz, mas o Eclipse me dá um aviso que não consigo lidar.

Aqui está o que eu tenho:

Este ArrayList contém os elementos que devem estar no botão giratório (é preenchido a partir de um arquivo posteriormente):

ArrayList<String> spinnerArray = new ArrayList<String>();

Este é o código que encontrei em um site que deve criar o spinner:

Spinner spinner = new Spinner(this);
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
                android.R.layout.simple_spinner_dropdown_item,
                spinnerArray);
spinner.setAdapter(spinnerArrayAdapter);

Agora, a segunda linha (ArrayAdapter ...) me dá um aviso no Eclipse dizendo "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized": Eu não tenho idéia de como consertar isso (ou o que isso significa em primeiro lugar :)).

É apenas um aviso e o aplicativo parece funcionar bem, mas eu ainda gostaria de entender o que está errado e corrigi-lo. Qualquer dica é apreciada.

Saudações, Select0r

Respostas:


388

ArrayAdapter<String> Deveria trabalhar.

ou seja:

Spinner spinner = new Spinner(this);
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item,
           spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
                                                     .simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter); 

Eu tentei isso, mas o erro só muda um pouco :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r

2
Comentou rapidamente enquanto você editava sua postagem :) Perdi a segunda <String>, seu código funciona agora, muito obrigado!
Select0r

23
use ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);ou então um botão de opção pode aparecer no botão giratório em alguns dispositivos.
Ken

seu answere foi útil e você pode por favor me dizer que se eu estou usando dois spinners e eu quero se 1 girador só então segundo deve trabalhar

1
Ele também descreve esse método na documentação do Android: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones

109

Da mesma maneira com Array

// Array of choices
String colors[] = {"Red","Blue","White","Yellow","Black", "Green","Purple","Orange","Grey"};

// Selection of the spinner
Spinner spinner = (Spinner) findViewById(R.id.myspinner);

// Application of the Array to the Spinner
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item, colors);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
spinner.setAdapter(spinnerArrayAdapter);

Eu fiz isso usando um ArrayList porque minha matriz vem de um loop (não estático).
Jacksonkr

61

Isso funcionou para mim com um array de cadeias chamado shoescarregado a partir dos recursos do projeto:

Spinner              spinnerCountShoes = (Spinner)findViewById(R.id.spinner_countshoes);
ArrayAdapter<String> spinnerCountShoesArrayAdapter = new ArrayAdapter<String>(
                     this,
                     android.R.layout.simple_spinner_dropdown_item, 
                     getResources().getStringArray(R.array.shoes));
spinnerCountShoes.setAdapter(spinnerCountShoesArrayAdapter);

Este é o meu arquivo de recurso ( res/values/arrays.xml) com a string-array denominada shoes:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="shoes">
        <item>0</item>
        <item>5</item>
        <item>10</item>
        <item>100</item>
        <item>1000</item>
        <item>10000</item>
    </string-array>
</resources>

Com esse método, é mais fácil torná-lo multilíngue (se necessário).


36

Isso realmente funcionou para mim

    Spinner spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, spinnerArray);
    spinnerArrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );

    spinner = (Spinner) findViewById( R.id.spinner );
    spinner.setAdapter(spinnerArrayAdapter);

6
Qual é o propósito deste Spinner spinner = new Spinner(this);quando você faz issospinner = (Spinner) findViewById( R.id.spinner );
MR5

por que erro: nenhum construtor adequado encontrado para o construtor ArrayAdapter (<anônimo OnItemSelectedListener>, int, DetailData) ArrayAdapter.ArrayAdapter (Contexto, int, int, Lista <>) não é aplicável?
user151968

6

este trabalho para mim: -

String[] array = {"A", "B", "C"};
String abc = "";


Spinner spinner = new Spinner(getContext());
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, array); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);

Eu estou usando um fragmento.


3

Na linguagem Kotlin, você pode fazê-lo desta maneira:

val values = arrayOf(
    "cat",
    "dog",
    "chicken"
)

ArrayAdapter(
    this,
    android.R.layout.simple_spinner_item,
    values
).also {
    it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = it
}
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.