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.