我在网上找不到任何关于该函数的文档,谷歌甚至没有发现任何有用的东西。我试图找到原始代码,但失败了:)(我怀疑我是否能理解它。)那么,有人知道这个函数的实际作用吗;它返回什么"项目ID"?
我认为,如果GetItemAtPosition
返回项目中包含的字符串,那么GetItemIdAtPosition
可能会返回"name"属性的内容。但和往常一样,情况并不像预期的那样。
我使用了一个基于此的微调器:
<string-array name="choices">
<item>Choose action</item>
<item name="3">Back to 3</item>
<item name="2">Back to 2</item>
</string-array>
从微调器中选择时使用吐司输出:
private void choice_callback (object sender, ItemEventArgs e) {
Spinner spinner = (Spinner)sender;
string toast = string.Format ("Chosen action: {0} at pos {1} ID {2}",
spinner.GetItemAtPosition (e.Position),
e.Position,
spinner.GetItemIdAtPosition(e.Position));
Toast.MakeText (this, toast, ToastLength.Short).Show ();
}
输出"选择的动作:返回位置1 ID 1处的3"和类似内容;换句话说,spinner.GetItemIdAtPosition(e.Position)
的返回似乎与e.Position
本身相同。
附带说明:该应用程序基于此微调器教程:http://docs.xamarin.com/android/tutorials/User_Interface/spinner.我只采用了你可以在上面看到的部分,试图看看下拉列表中的项目是否可以通过它们的位置来识别。
它返回适配器的GetItemId(int position)
返回的值。下面是一个例子来说明如何。它基于http://docs.xamarin.com/android/tutorials/User_Interface/spinner教程:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
Spinner spinner = FindViewById<Spinner>(Resource.Id.spinner);
spinner.ItemSelected += SpinnerItemSelected;
spinner.Adapter =
new MyAdapter(this, Android.Resource.Layout.SimpleSpinnerItem,
Resources.GetStringArray(Resource.Array.planets_array));
}
private void SpinnerItemSelected(object sender, ItemEventArgs e)
{
Spinner spinner = (Spinner) sender;
string toast = string.Format("The planet is {0}",
spinner.GetItemIdAtPosition(e.Position));
Toast.MakeText(this, toast, ToastLength.Long).Show();
}
public class MyAdapter : ArrayAdapter
{
private int[] _newIds = new[] {9, 7, 5, 3, 1, 8, 6, 4, 2};
public MyAdapter(Context context, int textViewResourceId, object[] objects)
: base(context, textViewResourceId, objects)
{
}
public override long GetItemId(int position)
{
return _newIds[position];
}
}
实际情况是,当您选择一个项时,它会显示适配器返回的值。在这个例子中,我对每个位置使用了随机值。如果选择第二个项目,它将返回_newIds
数组中第二个位置的值,即7
。