Xamarin.android 如何在使用自定义适配器时将微调器设置为特定值

Xamarin.android 如何在使用自定义适配器时将微调器设置为特定值,xamarin.android,Xamarin.android,我有一个旋转器,我用表中的数据填充它。因此,我使用定制适配器,因为我需要能够显示一列,但我将存储在表中的数据来自另一列。比如说我有一张叫颜色的桌子。它有一个ID字段和Desc字段。所以,当你选择一种颜色时,我的微调器将显示红色、绿色、蓝色和黑色,我需要获取该颜色的ID并存储它。我有纺纱机和工作良好。我创建了一个custome适配器来拉入表中,这里是我的适配器 class SpinnerAdapter : BaseAdapter { private IEnumerable<Color

我有一个旋转器,我用表中的数据填充它。因此,我使用定制适配器,因为我需要能够显示一列,但我将存储在表中的数据来自另一列。比如说我有一张叫颜色的桌子。它有一个ID字段和Desc字段。所以,当你选择一种颜色时,我的微调器将显示红色、绿色、蓝色和黑色,我需要获取该颜色的ID并存储它。我有纺纱机和工作良好。我创建了一个custome适配器来拉入表中,这里是我的适配器

class SpinnerAdapter : BaseAdapter
{
    private IEnumerable<Color> _Color;
    private Activity _context;

    public SpinnerAdapter(Activity context, IEnumerable<Color> Color)
    {
        _context = context;
        _Color = Color;
    }

    public override View GetView(int position, View convertView, 
                                 ViewGroup parent)
    {
        var view = (convertView ?? _context.LayoutInflater.Inflate(
            Resource.Layout.SpinnerList, parent, false)) as LinearLayout;
        var Color = _Color.ElementAt(position);
        view.FindViewById<TextView>(Resource.Id.ID).Text = 
            Color.ColorCd.ToString();
        view.FindViewById<TextView>(Resource.Id.TimeID).Text =
            Color.ColorDesc.ToString();

        return view;
    }

    public override int Count
    {
        get { return _Color.Count(); }
    }

    public Color GetColor(int position)
    {
        return _Color.ElementAt(position);
    }

    public override Java.Lang.Object GetItem(int position)
    {
        return null;
    }
    public override long GetItemId(int position)
    {
        return position;
    }
}
class SpinnerAdapter:BaseAdapter
{
私有IEnumerable_颜色;
私人活动——语境;
公共SpinnerAdapter(活动上下文,IEnumerable颜色)
{
_上下文=上下文;
_颜色=颜色;
}
公共覆盖视图GetView(int位置,视图转换视图,
视图组(父级)
{
var view=(convertView???\u context.LayoutInflater.Inflate(
Resource.Layout.SpinnerList,parent,false)作为线性布局;
var Color=_Color.ElementAt(位置);
view.FindViewById(Resource.Id.Id)。文本=
Color.ColorCd.ToString();
view.findviewbyd(Resource.Id.TimeID).Text=
Color.ColorDesc.ToString();
返回视图;
}
公共覆盖整数计数
{
获取{return _Color.Count();}
}
公共颜色GetColor(内部位置)
{
返回颜色元素(位置);
}
public override Java.Lang.Object GetItem(int位置)
{
返回null;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
}
在我的活动页面中,我将适配器设置为微调器,如下所示

Spinner spAdapter = FindViewById<Spinner>(Resource.Id.spAdapter);
spAdapter.ItemSelected += new EventHandler<ItemEventArgs>(spAdapter_ItemClick);
var Color = ((LeavApplication)Application).LeaveRepository.GetAllColor();
spAdapter.Adapter = new SpinnerAdapter(this, Color);
微调器spAdapter=FindViewById(Resource.Id.spAdapter);
spAdapter.ItemSelected+=新事件处理程序(spAdapter\u itemsclick);
var Color=((leavaApplication)Application.LeaveRepository.GetAllColor();
spAdapter.Adapter=新SpinnerAdapter(此,颜色);

那部分很好用。但是,如果我有一个值,我希望微调器设置为如何执行。例如,我想将微调器的值设置为“蓝色”,如何查找蓝色的位置,以便使用SetSelection函数设置微调器。我需要在适配器中创建一个函数,它是什么。

我认为您可以自己使用颜色列表,然后在微调器上使用SetSelection

e、 g:

Spinner-Spinner=findviewbyd(Resource.Id.spAdapter);
spinner.ItemSelected+=新事件处理程序(spAdapter\u itemsclick);
var colors=((leavaapplication)Application.LeaveRepository.GetAllColor().ToList();
spinner.Adapter=新的SpinnerAdapter(此,颜色);
spinner.SetSelection(colors.IndexOf(TheColorIWant));

我找到了一个适合我的答案。在我的自定义适配器“SpinnerAdapter.cs”中,我添加了一个函数

public int GetPosition(string value)
{
  int i = 0;
  foreach (var item in _Color)
  {
    if (item.ColorDesc == value)
    {
      return i;
    }
    ++i;
  }
  return 0;
}
然后在我的活动页面中,我可以添加这个

  Spinner spAdapter = FindViewById<Spinner>(Resource.Id.spAdapter);
  spAdapter.ItemSelected += new EventHandler<ItemEventArgs>(spAdapter_ItemClick);
  var Color = ((LeavApplication)Application).LeaveRepository.GetAllColor();
  spAdapter.Adapter = new SpinnerAdapter(this, Color);

  // Set the spinner with preDefined value
  string sColor = "Green";
  int iPosition = ((SpinnerAdapter)spAdapter.Adapter).GetPosition(sColor);
  FindViewById<Spinner>(Resource.Id.spAdapter).SetSelection(iPosition);
微调器spAdapter=FindViewById(Resource.Id.spAdapter);
spAdapter.ItemSelected+=新事件处理程序(spAdapter\u itemsclick);
var Color=((leavaApplication)Application.LeaveRepository.GetAllColor();
spAdapter.Adapter=新SpinnerAdapter(此,颜色);
//使用预定义值设置微调器
字符串sColor=“绿色”;
inti位置=((SpinnerAdapter)spAdapter.Adapter).GetPosition(sColor);
findviewbyd(Resource.Id.spAdapter).SetSelection(iPosition);

它将所选项目设置为预先确定的颜色。

您应该在主体中使用以下方法

        int itemPosition = spinnerConsultationDegreeAdapter.GetItemPosition(request.ConsultationDegreeId);
        spinnerConsultationDegree.SetSelection(itemPosition);
然后添加一个对应适配器的函数

    public int GetItemPosition(int consultationDegreeId)
    {
        var degree = _consultationDegrees.FirstOrDefault(q => q.Id == consultationDegreeId);
        var position = _consultationDegrees.IndexOf(degree);
        return position;
    }

这在IndexOf上获取了一个错误:错误为“Android.widget.spinner”不包含IndexOf的定义,并且没有扩展方法“IndexOf”接受类型为Android.widget.spinner的第一个参数我放置的代码有
颜色。IndexOf
,而不是
spinner.IndexOf
    public int GetItemPosition(int consultationDegreeId)
    {
        var degree = _consultationDegrees.FirstOrDefault(q => q.Id == consultationDegreeId);
        var position = _consultationDegrees.IndexOf(degree);
        return position;
    }