Спиннеры позволяют быстро выбрать одно значение из набора. В состоянии по умолчанию счетчик показывает выбранное в данный момент значение. При нажатии на счетчик отображается меню, показывающее все остальные значения, которые может выбрать пользователь.
Вы можете добавить счетчик в свой макет с помощью объекта 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
как экземпляр интерфейса.