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

时间:2012-05-01 20:29:59

标签: xamarin.android

我有一个微调器,我正在填充表中的数据。所以我使用自定义适配器,因为我需要能够显示一列,但我将存储在表中的数据来自另一列。说我有一张叫做颜色的桌子。它有一个ID字段和Desc字段。因此,当您选择我需要获取该颜色的ID并存储它时,我的微调器将显示红色,绿色,蓝色,黑色。我有旋转器制作和工作正常。我创建了一个客户适配器来拉入表格,这是我的适配器。

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

在我的活动页面中,我将我的适配器设置为微调器,如此;

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

那部分一切正常。但如果我有一个值,我希望微调器设置为我该怎么做。例如,我想将微调器的值设置为“蓝色”我如何找到蓝色的位置,以便我可以使用SetSelection函数来设置微调器。是否需要在我的适配器中创建一个函数,它会是什么。

3 个答案:

答案 0 :(得分:0)

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

e.g:

  Spinner spinner = FindViewById<Spinner>(Resource.Id.spAdapter);
  spinner.ItemSelected += new EventHandler<ItemEventArgs>(spAdapter_ItemClick);
  var colors = ((LeavApplication)Application).LeaveRepository.GetAllColor().ToList();
  spinner.Adapter = new SpinnerAdapter(this, colors);
  spinner.SetSelection(colors.IndexOf(TheColorIWant));

答案 1 :(得分:0)

我想出了一个对我有用的答案。在我的自定义适配器“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);

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

答案 2 :(得分:0)

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

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