Добавьте спиннеры в свое приложение

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

Рисунок 1. Меню от прядильщика, показывающее доступные значения.

Вы можете добавить спиннер в свой макет с помощью Spinner -объекта, который вы обычно делаете в своем макете XML с элементом <Spinner> . Это показано в следующем примере:

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

Чтобы заполнить спиннер списком вариантов, укажите SpinnerAdapter в вашей Activity или исходном коде Fragment .

If you are using Material Design Components, exposed dropdown menus are the equivalent of a 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);

The createFromResource() method lets you create an ArrayAdapter from the string array. The third argument for this method is a layout resource that defines how the selected choice appears in the spinner control. The platform provides the simple_spinner_item layout. This is the default layout unless you want to define your own layout for the spinner's appearance.

Call setDropDownViewResource(int) to specify the layout the adapter uses to display the list of spinner choices. simple_spinner_dropdown_item is another standard layout defined by the platform.

Call setAdapter() to apply the adapter to your Spinner .

Реагировать на выбор пользователя

When the user selects an item from the spinner's menu, the Spinner object receives an on-item-selected event.

Чтобы определить обработчик события выбора для счетчика, реализуйте интерфейс AdapterView.OnItemSelectedListener и соответствующий метод обратного вызова onItemSelected() . For example, here's an implementation of the interface in an 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.
    }
}

The AdapterView.OnItemSelectedListener interface requires the onItemSelected() and onNothingSelected() callback methods.

Specify the interface implementation by calling 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 как экземпляр интерфейса.