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>, ваш код работает сейчас, большое спасибо!
Select0r

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

Ваш ответ был полезен, и можете ли вы сказать мне, что если я использую два счетчика, и я хочу, чтобы только 1-й счетчик работал, тогда второй должен работать

1
он также описывает этот метод в документации для Android: developer.android.com/guide/topics/ui/controls/spinner.html
WOUNDEDStevenJones

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, потому что мой массив происходит из цикла (не статического).
Джексонкр

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 (конструктор <anonymous OnItemSelectedListener>, int, DetailData) ArrayAdapter.ArrayAdapter (Context, int, int, List <String>) не применим?
user151968

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.