MonoDroid中的GetItemIdAtPosition返回什么?

时间:2012-04-03 23:51:18

标签: android event-handling xamarin.android arrays

我在网上找不到该功能的任何文档,谷歌甚至没有发现任何有用的东西。我试图找到原始代码但失败了:)(我怀疑我无论如何都能理解它。)所以有人知道这个函数实际上做了什么;它返回什么“物品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>

当从微调器中选择一个选项时,使用toast进行输出:

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 ();
}

输出“选择动作:返回3位于pos 1 ID 1”和类似;换句话说,spinner.GetItemIdAtPosition(e.Position)的返回似乎与e.Position本身相同。

附注:该应用基于此微调器教程:http://docs.xamarin.com/android/tutorials/User_Interface/spinner。我只采用了上面可以看到的位来尝试查看下拉列表中的项目是否可以通过其位置进行识别。

1 个答案:

答案 0 :(得分:0)

它返回适配器的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