1

テーブルからデータを入力するスピナーがあります。ある列を表示できるようにする必要があるため、カスタムメイドのアダプターを使用していますが、テーブルに保存するデータは別の列からのものです。color というテーブルがあるとします。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 関数を使用してスピナーを設定できるように、青の位置を見つけるにはどうすればよいですか。アダプターで作成する必要がある関数はありますか?それは何でしょうか?

4

3 に答える 3

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

そして、選択したアイテムを所定の色に設定しています。

于 2012-05-02T14:55:42.080 に答える
0

カラーリストを自分で使用して、スピナーで SetSelection を使用できると思いますか?

例えば:

  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));
于 2012-05-02T09:08:14.507 に答える
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;
    }
于 2017-04-30T18:39:18.573 に答える