Android: Créez un spinner par programme à partir d'un tableau

198

Je suis tout nouveau sur Android et j'essaie de créer un spinner par programme et de le nourrir avec des données à partir d'un tableau, mais Eclipse me donne un avertissement que je ne peux pas gérer.

Voici ce que j'ai obtenu:

Cette ArrayList contient les éléments qui devraient être dans le spinner (est rempli à partir d'un fichier plus tard):

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

Voici le code que j'ai trouvé sur un site qui devrait créer le spinner:

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

Maintenant, la deuxième ligne (ArrayAdapter ...) me donne un avertissement dans Eclipse disant "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized" , je n'ai aucune idée de comment résoudre ce problème (ou ce que cela signifie en premier lieu :)).

C'est juste un avertissement et l'application semble fonctionner correctement, mais j'aimerais toujours comprendre ce qui ne va pas et y remédier. Tout indice est apprécié.

Salutations, Select0r

Select0r
la source

Réponses:

388

ArrayAdapter<String> devrait marcher.

c'est à 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); 
Brandon O'Rourke
la source
J'ai essayé mais l'erreur change juste légèrement :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r
2
Commenté rapidement pendant que vous éditiez votre post :) J'ai raté la seconde <String>, votre code fonctionne maintenant, merci beaucoup!
Select0r
23
utiliser ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);ou bien un bouton radio peut apparaître dans le spinner sur certains appareils.
Ken
votre réponse a été utile et pouvez-vous s'il vous plaît me dire que si j'utilise deux filateurs et que je veux seulement si le 1er spinner ne fonctionne que le second
1
il décrit également cette méthode dans la documentation Android: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones
109

De la même manière avec 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);
Yann Masoch
la source
J'ai fait cela en utilisant un ArrayList parce que mon tableau provient d'une boucle (non statique).
Jacksonkr
61

Cela a fonctionné pour moi avec un tableau de chaînes nommé shoeschargé à partir des ressources du projet:

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

Ceci est mon fichier de ressources ( res/values/arrays.xml) avec le tableau de chaînes nommé 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>

Avec cette méthode, il est plus facile de le rendre multilingue (si nécessaire).

Bruno Bieri
la source
36

Cela a vraiment fonctionné pour moi

    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);
Opy
la source
6
Quel est le but de cela Spinner spinner = new Spinner(this);quand vous faites celaspinner = (Spinner) findViewById( R.id.spinner );
mr5
pourquoi erreur: aucun constructeur approprié trouvé pour ArrayAdapter (<anonyme OnItemSelectedListener>, int, DetailData) constructeur ArrayAdapter.ArrayAdapter (Context, int, int, List <String>) n'est pas applicable?
user151968
6

ce travail pour moi: -

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

J'utilise un fragment.

Arish Khan
la source
3

En langage Kotlin, vous pouvez le faire de cette manière:

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
}
Micer
la source