Android: Erstellen Sie den Spinner programmgesteuert aus dem Array

198

Ich bin ganz neu in Android und versuche, einen Spinner programmgesteuert zu erstellen und ihn mit Daten aus einem Array zu versorgen, aber Eclipse gibt mir eine Warnung, die ich nicht verarbeiten kann.

Folgendes habe ich bekommen:

Diese ArrayList enthält die Elemente, die sich im Drehfeld befinden sollten (wird später aus einer Datei gefüllt):

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

Dies ist Code, den ich auf einer Site gefunden habe, die den Spinner erstellen soll:

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

Jetzt gibt mir die zweite Zeile (ArrayAdapter ...) in Eclipse eine Warnung "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized", dass ich keine Ahnung habe, wie ich das beheben soll (oder was das überhaupt bedeutet :)).

Es ist nur eine Warnung und die App scheint in Ordnung zu sein, aber ich möchte trotzdem verstehen, was falsch ist, und es beheben. Jeder Hinweis wird geschätzt.

Grüße, Select0r

Select0r
quelle

Antworten:

388

ArrayAdapter<String> sollte arbeiten.

dh:

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
quelle
Ich habe das versucht, aber der Fehler ändert sich nur geringfügig :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r
2
Zu schnell kommentiert, während Sie Ihren Beitrag bearbeitet haben :) Ich habe den zweiten verpasst <String>, Ihr Code funktioniert jetzt, vielen Dank!
Select0r
23
Bei ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);einigen Geräten wird im Drehfeld möglicherweise ein Optionsfeld angezeigt.
Ken
Ihre Antwort war hilfreich und können Sie mir bitte sagen, dass, wenn ich zwei Spinner benutze und ich möchte, wenn nur der erste Spinner, dann der zweite funktionieren sollte
1
Es beschreibt diese Methode auch in der Android-Dokumentation: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones
109

Genauso wie bei 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
quelle
Ich habe dies mit einer ArrayList gemacht, weil mein Array aus einer Schleife stammt (nicht statisch).
Jacksonkr
61

Dies funktionierte bei mir mit einem String-Array namens, shoesdas aus den Projektressourcen geladen wurde:

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

Dies ist meine Ressource - Datei ( res/values/arrays.xml) mit dem String-Array genannt 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>

Mit dieser Methode ist es einfacher, sie mehrsprachig zu machen (falls erforderlich).

Bruno Bieri
quelle
36

Das hat bei mir tatsächlich funktioniert

    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
quelle
6
Was ist der Zweck davon, Spinner spinner = new Spinner(this);wenn Sie dies tunspinner = (Spinner) findViewById( R.id.spinner );
mr5
Warum Fehler: Es wurde kein geeigneter Konstruktor für ArrayAdapter (<anonymer OnItemSelectedListener>, int, DetailData) gefunden. Der Konstruktor ArrayAdapter.ArrayAdapter (Context, int, int, List <String>) ist nicht anwendbar.
user151968
6

diese Arbeit für mich: -

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

Ich benutze ein Fragment.

Arish Khan
quelle
3

In der Kotlin-Sprache können Sie dies folgendermaßen tun:

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
quelle