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
布局设置为内容视图后,使用 FindViewById<>(int)
从布局中获取 Spinner
小组件。
此 然后,CreateFromResource()
方法创建一个新的 ArrayAdapter
,它将字符串数组中的每个项绑定到 Spinner
的初始外观(这是选择时每个项在微调框中的显示方式)。 Resource.Array.planets_array
ID 引用上面定义的 string-array
,Android.Resource.Layout.SimpleSpinnerItem
ID 引用由平台定义的标准微调框外观的布局。
调用 SetDropDownViewResource
以定义打开小组件时每个项的外观。 最后,ArrayAdapter
设置为通过设置 Adapter
属性将其所有项与 Spinner
关联。
现在提供一个回叫方法,用于在从 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
,以便可以访问该项。 使用 ItemEventArgs
上的属性 Position
,可以找到所选对象的文本,并使用它来显示 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();
运行应用程序;吐司提示应如下所示:
Resource.Layout
ArrayAdapter
Spinner
本页的部分内容是根据 Android 开源项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 Attribution License 中的条款进行使用。