MonoDroid中的GetItemIdAtPosition返回了什么



我在网上找不到任何关于该函数的文档,谷歌甚至没有发现任何有用的东西。我试图找到原始代码,但失败了:)(我怀疑我是否能理解它。)那么,有人知道这个函数的实际作用吗;它返回什么"项目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

相关内容

  • 没有找到相关文章

最新更新