Спиннеры позволяют быстро выбрать одно значение из набора. В состоянии по умолчанию счетчик показывает выбранное в данный момент значение. При нажатии на счетчик отображается меню, показывающее все остальные значения, которые может выбрать пользователь.

Вы можете добавить счетчик в свой макет с помощью объекта Spinner , что вы обычно делаете в макете XML с помощью элемента <Spinner> . Это показано в следующем примере:
<Spinner android:id="@+id/planets_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" />
Чтобы заполнить счетчик списком вариантов, укажите SpinnerAdapter в исходном коде вашего Activity или Fragment .
Если вы используете компоненты Material Design, открытые раскрывающиеся меню являются эквивалентом Spinner .
Заполните счетчик выбором пользователя
Выбор, который вы предоставляете для счетчика, может поступать из любого источника, но вы должны предоставить его через SpinnerAdapter , например ArrayAdapter , если варианты доступны в массиве, или CursorAdapter , если варианты доступны из запроса к базе данных.
Например, если доступные варианты для вашего счетчика заранее определены, вы можете предоставить им массив строк, определенный в файле строковых ресурсов :
<?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>
С таким массивом вы можете использовать следующий код в своей Activity или Fragment , чтобы предоставить счетчику массив, используя экземпляр ArrayAdapter :
Котлин
val spinner: Spinner = findViewById(R.id.planets_spinner) // Create an ArrayAdapter using the string array and a default spinner layout. ArrayAdapter.createFromResource( this, R.array.planets_array, android.R.layout.simple_spinner_item ).also { adapter -> // Specify the layout to use when the list of choices appears. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) // Apply the adapter to the spinner. spinner.adapter = adapter }
Ява
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner); // Create an ArrayAdapter using the string array and a default spinner layout. ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.planets_array, android.R.layout.simple_spinner_item ); // Specify the layout to use when the list of choices appears. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner. spinner.setAdapter(adapter);
Метод createFromResource() позволяет создать ArrayAdapter из массива строк. Третий аргумент этого метода — это ресурс макета, который определяет, как выбранный вариант отображается в элементе управления счетчиком. Платформа предоставляет макет simple_spinner_item . Это макет по умолчанию, если вы не хотите определить свой собственный макет для внешнего вида счетчика.
Вызовите setDropDownViewResource(int) чтобы указать макет, который адаптер использует для отображения списка вариантов счетчика. simple_spinner_dropdown_item — еще один стандартный макет, определенный платформой.
Вызовите setAdapter() , чтобы применить адаптер к вашему Spinner .
Реагировать на выбор пользователя
Когда пользователь выбирает элемент в меню счетчика, объект Spinner получает событие выбора элемента.
Чтобы определить обработчик события выбора для счетчика, реализуйте интерфейс AdapterView.OnItemSelectedListener и соответствующий метод обратного вызова onItemSelected() . Например, вот реализация интерфейса в Activity :
Котлин
class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener { ... override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) { // An item is selected. You can retrieve the selected item using // parent.getItemAtPosition(pos). } override fun onNothingSelected(parent: AdapterView<*>) { // Another interface callback. } }
Ява
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item is selected. You can retrieve the selected item using // parent.getItemAtPosition(pos). } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback. } }
Интерфейс AdapterView.OnItemSelectedListener требует методов обратного вызова onItemSelected() и onNothingSelected() .
Укажите реализацию интерфейса, вызвав setOnItemSelectedListener() :
Котлин
val spinner: Spinner = findViewById(R.id.planets_spinner) spinner.onItemSelectedListener = this
Ява
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner); spinner.setOnItemSelectedListener(this);
Если вы реализуете интерфейс AdapterView.OnItemSelectedListener с помощью Activity или Fragment , как в предыдущем примере, вы можете передать this как экземпляр интерфейса.