Android: створюйте спінер програмно з масиву


198

Я все нове в Android, і я намагаюся створити спінер програмно і живити його даними з масиву, але Eclipse дає мені попередження, що я не можу впоратися.

Ось що я отримав:

Цей ArrayList містить елементи, які повинні бути в спінері (заповнюється з файлу пізніше):

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

Це код, який я знайшов на сайті, який повинен створити спінер:

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

Тепер другий рядок (ArrayAdapter ...) дає мені попередження в Eclipse, кажучи "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized": я не маю уявлення, як це виправити (або що це означає в першу чергу :)).

Це лише попередження, і додаток, здається, працює добре, але я все одно хотів би зрозуміти, що не так, і виправити це. Будь-який натяк цінується.

Привітання, Select0r

Відповіді:


388

ArrayAdapter<String> повинен працювати.

тобто:

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

Я спробував це, але помилка просто незначно змінюється :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
Select0r

2
Прокоментував швидко, коли ви редагували свою публікацію :) Я пропустив другу <String>, ваш код працює зараз, велике спасибі!
Виберіть0р

23
використання ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);або в іншому випадку перемикач може відображатися у спінері на деяких пристроях.
Кен

ваш answere був корисним, і чи можете ви, будь ласка, скажіть мені, що якщо я використовую два спінери, і я хочу, якщо тільки 1-й

1
Він також описує цей метод у документації на android: developer.android.com/guide/topics/ui/controls/spinner.html
НАЧАЛОСТЕЙНІШЕ

109

Точно так само і з 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);

Я зробив це за допомогою ArrayList, тому що мій масив походить з циклу (не статичного).
Jacksonkr

61

Це працювало для мене з масивом рядків, названим shoesзавантаженим з ресурсів проектів:

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

Це мій файл ресурсів ( res/values/arrays.xml) з рядком масиву з назвою 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>

За допомогою цього методу простіше зробити його багатомовним (якщо необхідно).


36

Це насправді спрацювало для мене

    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
Яка мета цього, Spinner spinner = new Spinner(this);коли ви це робитеspinner = (Spinner) findViewById( R.id.spinner );
mr5

чому помилка: для ArrayAdapter (<анонімний OnItemSelectedListener>, int, DetailData) конструктор ArrayAdapter.ArrayAdapter (Context, int, int, List <String>) не застосовується?
користувач151968

6

ця робота для мене: -

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

Я використовую Фрагмент.


3

Котлінською мовою ви можете це зробити так:

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
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.