Выпадающий список предоставляет простой способ выбора одного значения из набора. В неактивном состоянии показывает выбранное значение. Нажатие на список приводит к его раскрытию, позволяя пользователю выбрать новое значение.
Вы можете добавить выпадающий список, используя объект типа Spinner. В XML разметке используется элемент <Spinner>
:
1 2 3 4 |
<Spinner android:id="@+id/planets_spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" /> |
Для заполнения списка используется специальный адаптер типа SpinnerAdapter
Заполнение выпадающего списка
Значения списка могут быть взяты из любого источника, но должны быть предоставлены адаптером типа SpinnerAdapter, например ArrayAdapter, если значения хранятся в массиве или CursorAdapter, если значения хранятся в базе данных.
Создадим, к примеру, список значений в виде массива строка, хранящийся в файле ресурса:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array> </resources> |
Далее используем ArrayAdapter для заполнения:
1 2 3 4 5 6 7 8 |
Spinner spinner = (Spinner) findViewById(R.id.spinner); // Создадим ArrayAdapter, используя строковый массив и разметку с элементом выпадающего списка ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item); // Указываем разметку, которая используется при раскрытии списка adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Применяем адаптер к списку spinner.setAdapter(adapter); |
Метод createFromResource() позволяет создать адаптер ArrayAdapter из строкового массива. Третий аргумент метода это ресурс разметки, который указывает как выбранное значение отображается в списке. Разметка simple_spinner_layout предоставляется платформой и имеет стандартный вид. Вы можете ее использовать, если не хотите создавать собственный макет.
Затем необходимо вызвать метод setDropDownViewResource(int), чтобы указать разметку, которую адаптер должен использовать для отображения списка значений (simple_spinner_dropdown_item это еще один стандартный макет, предоставляемый платформой).
Вызовите метод setAdapter() для того, чтобы применить адаптер к выпадающему списку.
Обработка выбора значения
Когда пользователь выбирает значение из списка, объект Spinner получает событие on-item-selected.
Чтобы обработать событие, реализуйте интерфейс AdapterView.OnItemSelectedListener и соответствующий метод обратного вызова onItemSelected(). Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // Значение выбрано. Получить выбранный пункт можно с помощью метода // parent.getItemAtPosition(pos) } public void onNothingSelected(AdapterView<?> parent) { // Еще один метод интерфейса } } |
Интерфейс AdapterView.OnItemSelectedListener требует реализации двух методов onItemSelected() и onNothingSelected().
Затем необходимо указать реализацию интерфейса с помощью метода setOnItemSelectedListener():
1 2 |
Spinner spinner = (Spinner) findViewById(R.id.spinner); spinner.setOnItemSelectedListener(this); |
Если вы реализуете интерфейс в вашем явлении (Activity) или фрагменте (Fragment), вы должны передать в качестве экземпляра интерфейса объект this
(как в примере выше).