Android: programuj spinner programowo z tablicy


198

Jestem zupełnie nowy na Androida i próbuję programowo stworzyć spinner i zasilać go danymi z tablicy, ale Eclipse ostrzega mnie, że nie dam rady.

Oto co mam:

Ta ArrayList przechowuje elementy, które powinny znajdować się w pokrętle (później wypełnia się z pliku):

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

Oto kod, który znalazłem na stronie, która powinna utworzyć błystkę:

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

Teraz druga linia (ArrayAdapter ...) ostrzega mnie w Eclipse, mówiąc "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized": „Nie mam pojęcia, jak to naprawić (lub co to znaczy w pierwszej kolejności :)).

To tylko ostrzeżenie, a aplikacja wydaje się działać poprawnie, ale nadal chcę zrozumieć, co jest nie tak i naprawić. Każda podpowiedź jest mile widziana.

Pozdrowienia, Select0r

Odpowiedzi:


388

ArrayAdapter<String> powinno działać.

to znaczy:

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

Próbowałem, ale błąd nieznacznie się zmienia :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r

2
Skomentowałem szybko podczas edytowania Twojego posta :) Brakowało mi drugiego <String>, Twój kod działa teraz, wielkie dzięki!
Wybierz 0

23
użyć ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);lub przycisk radiowy może pojawić się w tarczy na niektórych urządzeniach.
Ken

Twoja odpowiedź była pomocna i czy możesz mi powiedzieć, że jeśli używam dwóch spinnerów i chcę, jeśli pierwszy spinner tylko wtedy drugi powinien działać

1
opisuje również tę metodę w dokumentacji Androida: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones

109

W ten sam sposób z 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);

Zrobiłem to przy użyciu ArrayList, ponieważ moja tablica pochodzi z pętli (nie statycznej).
Jacksonkr

61

Działa to dla mnie z tablicą łańcuchów o nazwie shoesładowanej z zasobów projektów:

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

To jest mój plik zasobów ( res/values/arrays.xml) z tablicą łańcuchów o nazwie 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>

Dzięki tej metodzie łatwiej jest uczynić go wielojęzycznym (w razie potrzeby).


36

To faktycznie działało dla mnie

    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
Jaki jest tego cel, Spinner spinner = new Spinner(this);kiedy to robiszspinner = (Spinner) findViewById( R.id.spinner );
mr5

dlaczego błąd: nie znaleziono odpowiedniego konstruktora dla ArrayAdapter (<anonimowy OnItemSelectedListener>, int, DetailData) konstruktor ArrayAdapter.ArrayAdapter (kontekst, int, int, lista <String>) nie ma zastosowania?
user151968,

6

ta praca dla mnie: -

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

Używam fragmentu.


3

W języku Kotlin możesz to zrobić w następujący sposób:

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
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.