Android: crea lo spinner a livello di codice dall'array


198

Sono completamente nuovo su Android e sto provando a creare uno spinner a livello di codice e alimentandolo con i dati di un array, ma Eclipse mi avvisa che non posso gestirlo.

Ecco cosa ho ottenuto:

Questa ArrayList contiene gli elementi che dovrebbero essere nello spinner (in seguito verrà riempito da un file):

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

Questo è il codice che ho trovato su un sito che dovrebbe creare lo spinner:

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

Ora la seconda riga (ArrayAdapter ...) mi dà un avvertimento in Eclipse che dice "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized", non ho idea di come risolvere questo (o cosa significhi in primo luogo :)).

È solo un avvertimento e l'app sembra funzionare correttamente, ma mi piacerebbe ancora capire cosa c'è che non va e risolverlo. Ogni suggerimento è apprezzato.

Saluti, selezionare 0r

Risposte:


388

ArrayAdapter<String> dovrebbe funzionare.

vale a dire:

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

Ci ho provato, ma l'errore cambia solo leggermente :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
— Seleziona0

2
Commentato rapidamente mentre hai modificato il tuo post :) Ho perso il secondo <String>, il tuo codice funziona ora, grazie mille!
— Seleziona0

23
utilizzare ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);oppure un pulsante di opzione potrebbe apparire nello spinner su alcuni dispositivi.
— Ken

la tua risposta è stata utile e puoi per favore dirmi che se sto usando due spinner e voglio se solo il 1 ° spinner allora il secondo dovrebbe funzionare

1
descrive anche questo metodo nella documentazione Android: developer.android.com/guide/topics/ui/controls/spinner.html
— WOUNDEDStevenJones

109

Allo stesso modo con 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);

L'ho fatto usando un ArrayList perché il mio array proviene da un loop (non statico).
— Jacksonkr

61

Questo ha funzionato per me con un array di stringhe chiamato shoescaricato dalle risorse del progetto:

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

Questo è il mio file di risorse ( res/values/arrays.xml) con l' array string denominato 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>

Con questo metodo è più facile renderlo multilingue (se necessario).


36

Questo ha funzionato davvero per me

    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 è lo scopo di questo Spinner spinner = new Spinner(this);quando lo faispinner = (Spinner) findViewById( R.id.spinner );
— mr5,

why error: nessun costruttore adatto trovato per ArrayAdapter (<AnItemSelectedListener anonimo>, int, DetailData) costruttore ArrayAdapter.ArrayAdapter (Context, int, int, List <String>) non applicabile?
— user151968

6

questo lavoro per me: -

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

Sto usando un frammento.


3

Nel linguaggio Kotlin puoi farlo in questo modo:

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
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.