2012-05-01 4 views
1

私はテーブルからデータを入力するスピナーを持っています。だから私は1つの列を表示することができる必要があるためカスタムのアダプタを使用していますが、テーブルに保存するデータは別の列からです。色と呼ばれるテーブルがあるとします。 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); 

この部分はすべて正常に動作します。しかし、もし私が価値を持っているなら、私はスピナーをどのようにしてやりたいのですか?たとえば、スピナーの値を "Blue"に設定したいのですが、Blueの配置を見つけるにはどうすればいいですか?SetSelection関数を使ってスピナーを設定することができます。私のアダプタで作成する必要のある機能は何ですか?

答えて

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

機能を追加IndexOfの定義がなく、Android.widget.spinner型の最初の引数を受け入れる拡張メソッド 'IndexOf'はありません – mlwright

+0

私が書いたコードは 'spinner.IndexOf'ではなく' colors.IndexOf'でしたか? – Stuart

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

そして、選択項目を先行色に設定しています。エラーは「Android.widget.spinner」です:

0

あなたは、本体に

 int itemPosition = spinnerConsultationDegreeAdapter.GetItemPosition(request.ConsultationDegreeId); 
     spinnerConsultationDegree.SetSelection(itemPosition); 

を次のメソッドを使用する必要があり、これはIndexOfメソッドでエラーを取得し、対応するアダプタ

public int GetItemPosition(int consultationDegreeId) 
    { 
     var degree = _consultationDegrees.FirstOrDefault(q => q.Id == consultationDegreeId); 
     var position = _consultationDegrees.IndexOf(degree); 
     return position; 
    } 
関連する問題