Android. Интерфейс. Контролы. Spinner

👁 186 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

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

android-post-spinner-controll-photo

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

Добавление контрола спиннера в интерфейс

Мы можем добавить спиннер в наш layout с объектом спиннера. Для этого необходимо добавить в интерфейс layout  контрол с тегом <Spinner>. К примеру:

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

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

Добавление данных в спиннер из strings.xml. Способ 1

Это самый предпочтительный способ заполнения текстовых данных для контролов, так как очень удобно и универсально, когда все данные хранятся в одном общедоступном файле. Чтобы загрузить строки в виде списка в спиннер необходимо определить массив данных в файле ресурсов strings.xml

<resources>
    <string-array name="language_array">
        <item>English</item>
        <item>Русский</item>
        <item>العربية</item>
    </string-array>
</resources>

Ниже приведен код активити в методе onCreate для чтения массива списка из string.xml

Spinner spinner = (Spinner) findViewById(R.id.language_spinner);
// Создаем ArrayAdapter, используя текстовый массив и spinner layout по умолчанию
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.language_array, android.R.layout.simple_spinner_item);
// Определяем layout, когда происходит выбор из списка
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// устанавливаем адаптер к спиннеру
spinner.setAdapter(adapter);
// Заголовок по умолчанию
spinner.setPrompt("Language");
// Выбираем элемент по умолчанию
spinner.setSelection(1);

Элементы layout simple_spinner_item и simple_spinner_dropdown_item уже определены в системе, поэтому их можно установить без определения. Для пользовательского определения их нужно создать в папке ресурсов и прикрепить.

Добавление данных в спиннер из кода в виде массива. Способ 2

Второй способ — это прикрепление данных к спиннеру в виде списка из массива, который будет определен в коде. Ниже представлен код в методе onCreate

String[] data = {"English", "Русский", "لعربية"};
Spinner spinner = (Spinner) findViewById(R.id.language_spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, data);
// Определяем layout, когда происходит выбор из списка
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// устанавливаем адаптер к спиннеру
spinner.setAdapter(adapter);
// Заголовок по умолчанию
spinner.setPrompt("Language");
// Выбираем элемент по умолчанию
spinner.setSelection(1);

Обработка событий от спиннера

Для обработки событий достаточно, в методе onCreate, ниже кода инициализации спинера переопределить метод объекта спиннера setOnItemSelectedListener

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
                //Показываем позиция нажатого элемента
                Toast.makeText(getBaseContext(), "Position = " + position, Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });