Xamarin.Android Spinner
Spinner
— это мини-приложение, представляющее раскрывающийся список для выбора элементов. В этом руководстве объясняется, как создать простое приложение, отображающее список вариантов в Спиннере, а затем изменения, отображающие другие значения, связанные с выбранным выбором.
Базовый спиннер
В первой части этого руководства вы создадите простое мини-приложение спиннера, отображающее список планет. При выборе планеты всплывающее сообщение отображает выбранный элемент:
Запустите новый проект с именем HelloSpinner.
Откройте файл Resources/Layout/Main.axml и вставьте следующий XML-код:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="10dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/planet_prompt"
/>
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/planet_prompt"
/>
</LinearLayout>
Обратите внимание, что TextView
атрибуты android:text
и атрибуты оба ссылались на один и Spinner
android:prompt
тот же строковый ресурс. Этот текст ведет себя как заголовок мини-приложения. При применении к Spinner
нему текст заголовка появится в диалоговом окне выбора, которое отображается при выборе мини-приложения.
Измените ресурсы/значения/Strings.xml и измените файл следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloSpinner</string>
<string name="planet_prompt">Choose a planet</string>
<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>
Второй <string>
элемент определяет строку заголовка, TextView
Spinner
на которую ссылается приведенный выше макет.
Элемент <string-array>
определяет список строк, которые будут отображаться в качестве списка в Spinner
мини-приложении.
Теперь откройте MainActivity.cs и добавьте следующую using
инструкцию:
using System;
Затем вставьте следующий код для OnCreate()
метода ):
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "Main" layout resource
SetContentView (Resource.Layout.Main);
Spinner spinner = FindViewById<Spinner> (Resource.Id.spinner);
spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs> (spinner_ItemSelected);
var adapter = ArrayAdapter.CreateFromResource (
this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem);
adapter.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);
spinner.Adapter = adapter;
}
Main.axml
После установки макета в качестве представления Spinner
содержимого мини-приложение записывается из макета.FindViewById<>(int)
Токен CreateFromResource()
Затем метод создает новый ArrayAdapter
элемент, который привязывает каждый элемент в массиве строк к начальному внешнему виду для Spinner
(как каждый элемент будет отображаться в спиннере при выборе). Идентификатор Resource.Array.planets_array
ссылается на определенный string-array
выше Android.Resource.Layout.SimpleSpinnerItem
и идентификатор ссылается на макет для стандартного внешнего вида спиннера, определенного платформой.
SetDropDownViewResource
вызывается для определения внешнего вида каждого элемента при открытии мини-приложения. Наконец, ArrayAdapter
для параметра задано связывание всех его элементов с Spinner
ним, задав Adapter
свойство.
Теперь предоставьте метод обратного вызова, который уведомляет приложение о выборе элемента из него Spinner
. Вот как должен выглядеть этот метод:
private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
string toast = string.Format ("The planet is {0}", spinner.GetItemAtPosition (e.Position));
Toast.MakeText (this, toast, ToastLength.Long).Show ();
}
При выборе элемента отправитель будет приведение к Spinner
элементу, чтобы получить доступ к элементам. Position
Используя свойство в ItemEventArgs
объекте, вы можете узнать текст выбранного объекта и использовать его для отображенияToast
.
Запустите приложение; Он должен выглядеть следующим образом:
Спиннер с помощью пар "ключ-значение"
Часто необходимо использовать Spinner
для отображения значений ключей, связанных с некоторыми данными, используемыми приложением. Так как Spinner
не работает напрямую с парами "ключ-значение", необходимо хранить пару "ключ-значение" отдельно, заполнять Spinner
значениями ключей, а затем использовать позицию выбранного ключа в Спиннере для поиска связанного значения данных.
В следующих шагах приложение HelloSpinner изменяется, чтобы отобразить средную температуру для выбранной планеты:
Добавьте следующую using
инструкцию в MainActivity.cs:
using System.Collections.Generic;
Добавьте в класс следующую переменную экземпляра MainActivity
.
Этот список будет содержать пары "ключ-значение" для планет и их средних температур:
private List<KeyValuePair<string, string>> planets;
В методе OnCreate
добавьте следующий код перед adapter
объявлением:
planets = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Mercury", "167 degrees C"),
new KeyValuePair<string, string>("Venus", "464 degrees C"),
new KeyValuePair<string, string>("Earth", "15 degrees C"),
new KeyValuePair<string, string>("Mars", "-65 degrees C"),
new KeyValuePair<string, string>("Jupiter" , "-110 degrees C"),
new KeyValuePair<string, string>("Saturn", "-140 degrees C"),
new KeyValuePair<string, string>("Uranus", "-195 degrees C"),
new KeyValuePair<string, string>("Neptune", "-200 degrees C")
};
Этот код создает простое хранилище для планет и связанных с ними средних температур. (В реальном приложении база данных обычно используется для хранения ключей и связанных с ними данных.)
Сразу после приведенного выше кода добавьте следующие строки, чтобы извлечь ключи и поместить их в список (в порядке):
List<string> planetNames = new List<string>();
foreach (var item in planets)
planetNames.Add (item.Key);
Передайте этот список конструктору ArrayAdapter
(вместо planets_array
ресурса):
var adapter = new ArrayAdapter<string>(this,
Android.Resource.Layout.SimpleSpinnerItem, planetNames);
Измените spinner_ItemSelected
, чтобы выбранная позиция использовалась для поиска значения (температуры), связанного с выбранной планетой:
private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
string toast = string.Format("The mean temperature for planet {0} is {1}",
spinner.GetItemAtPosition(e.Position), planets[e.Position].Value);
Toast.MakeText(this, toast, ToastLength.Long).Show();
}
Запустите приложение; Всплывающее сообщение должно выглядеть следующим образом:
Ресурсы
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными влицензии Creative Commons 2.5 Attribution.