Спиннеры предоставляют быстрый путь выборки одного значения из некоторого списка. По умолчанию, спиннер показывает выбранное текущее значение.
Нажимая на выпадающее меню спиннера можно выбрать один из доступных значений из списка.
Добавление контрола спиннера в интерфейс
Мы можем добавить спиннер в наш layout с объектом спиннера. Для этого необходимо добавить в интерфейс layout контрол с тегом <Spinner>. К примеру:
<Spinner android:id="@+id/language_spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" />
Для заполнения спиннера со списком выбора, нам необходимо определить класс SpinnerAdapter в нашем текущем коде Activity или Fragment.
Добавление данных в спиннер из strings.xml. Способ 1
Это самый предпочтительный способ заполнения текстовых данных для контролов, так как очень удобно и универсально, когда все данные хранятся в одном общедоступном файле. Чтобы загрузить строки в виде списка в спиннер необходимо определить массив данных в файле ресурсов strings.xml
<resources> <string-array name="language_array"> <item>English</item> <item>Русский</item> <item>العربية</item> </string-array> </resources>
Ниже приведен код активити в методе onCreate для чтения массива списка из string.xml
Spinner spinner = (Spinner) findViewById(R.id.language_spinner); // Создаем ArrayAdapter, используя текстовый массив и spinner layout по умолчанию ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.language_array, android.R.layout.simple_spinner_item); // Определяем layout, когда происходит выбор из списка adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // устанавливаем адаптер к спиннеру spinner.setAdapter(adapter); // Заголовок по умолчанию spinner.setPrompt("Language"); // Выбираем элемент по умолчанию spinner.setSelection(1);
Элементы layout simple_spinner_item и simple_spinner_dropdown_item уже определены в системе, поэтому их можно установить без определения. Для пользовательского определения их нужно создать в папке ресурсов и прикрепить.
Добавление данных в спиннер из кода в виде массива. Способ 2
Второй способ — это прикрепление данных к спиннеру в виде списка из массива, который будет определен в коде. Ниже представлен код в методе onCreate
String[] data = {"English", "Русский", "لعربية"}; Spinner spinner = (Spinner) findViewById(R.id.language_spinner); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, data); // Определяем layout, когда происходит выбор из списка adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // устанавливаем адаптер к спиннеру spinner.setAdapter(adapter); // Заголовок по умолчанию spinner.setPrompt("Language"); // Выбираем элемент по умолчанию spinner.setSelection(1);
Обработка событий от спиннера
Для обработки событий достаточно, в методе onCreate, ниже кода инициализации спинера переопределить метод объекта спиннера setOnItemSelectedListener
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //Показываем позиция нажатого элемента Toast.makeText(getBaseContext(), "Position = " + position, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> arg0) { } });