0

我在网上找不到该功能的任何文档,谷歌甚至没有发现任何远程有用的东西。我试图找到原始代码但失败了:)(我怀疑我是否能理解它。)所以有人知道这个函数实际上是做什么的吗?它返回什么“项目 ID”?

我认为如果GetItemAtPosition返回项目中包含的字符串,GetItemIdAtPosition可能会返回“名称”属性的内容。但像往常一样,它并不像预期的那样。

我使用了基于此的微调器:

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

输出“Chosen action: Back to 3 at pos 1 ID 1”和类似的;换句话说,返回的spinner.GetItemIdAtPosition(e.Position)似乎和它自己是一样的e.Position

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

4

1 回答 1

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.

于 2012-04-04T08:31:27.603 回答