Spinner

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

Чтобы добавить Spinner, нужно для начала определить его в XML.

<Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

Затем в Spinner нужно загрузить значения, между которыми будет происходить выбор. Сделать это можно через XML. если значения уже определены заранее, либо программно.

  1. Добавление через XML
    Если варианты значений для спиннера заранее определны, вы можете создать строковый массив, определённый в ресурсах. В этом случае в папке res/values нужно открыть файл strings.xml и добавить в него <string-array> с нужными значениями.

    <string-array name="spinner_array">
      <item>Первая запись</item>
      <item>Вторая запись</item>
      <item>Третья запись</item>
    </string-array>

    Затем в коде разметки у спиннеру нужно добавить атрибут android:entries, передав в значение созданный массив.

    <Spinner
      android:id="@+id/spinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:entries="@array/spinner_array"
      />
  2. Добавление программно
    Чтобы добавить значения программно, нужно определить экземпляр Spinner в коде активности. После этого нужно создать экземпляр класса ArrayAdapter и передать в него варианты для спиннера.

    Spinner spinner = findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter =
        ArrayAdapter.createFromResource(this, R.array.spinner_array,
            android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    Метод createFromResource() позволяет создать ArrayAdapter из массива строк. Третьим аргументом в него передаётся разметка, определяющая вид элемента списка. simple_spinner_item является разметкой по умолчанию, если вы не хотите создать свою собственную разметку.

    Метод setDropDownViewResource() устанавливает разметку для списка.

    Метод setAdapter() устанавливает созданный адаптер в спиннер.

По умолчанию выбирается первый элемент в массиве, однако это можно изменить программно с помощью метода setSelection(), в аргументы которого нужно передать позицию элемента в массиве.

spinner.setSelection(2);

Если вам нужно узнать текущий выбранный элемент и его позицию, вы можете воспользоваться методами getSelectedItem() и getSelectedItemPosition() соответственно.

Spinner spinner = findViewById(R.id.spinner);
Toast.makeText(this, "Запись - "
    + spinner.getSelectedItem().toString()
    + "\nПозиция - "
    + spinner.getSelectedItemPosition(), Toast.LENGTH_LONG).show();

К спиннеру можно привязать слушатель, который будет принимать события при выборе пользователем какого-либо из элементов в списке. Для этого нужно воспользоваться методом setOnItemSelectedListener().

Spinner spinner = findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
  }

  @Override public void onNothingSelected(AdapterView<?> adapterView) {
  }
});

Здесь нужно переопределить методы onItemSelected(), принимающий событие при выборе элемента, и onNothingSelected(), принимающий событие когда ничего не выбрано. Если второй метод вам не нужен, просто оставьте его пустым. В onItemSelected() можно выполнять необходимые действия при выборе элемента в списке. Узнать, какой конкретно элемент был выбран и на какой позиции, можно узнать следующим образом:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    Toast.makeText(getApplicationContext(),
        "Запись - " + adapterView.getAdapter().getItem(i).toString() + "\nПозиция - " + i,
        Toast.LENGTH_SHORT).show();
  }

  @Override public void onNothingSelected(AdapterView<?> adapterView) {

  }
});

Дополнительные материалы

Использование Spinner в Android