2017-05-30 24 views
1

私はxamarinが新しく、ListViewでアイテムを選択し、行の色を変更してユーザーにどの行が表示されているかを知らせる方法を探しています選択された。ここで私はこの方法では、アイテムのクリックハンドラであるXamarin Android ListViewアイテムを選択して行の色を変更する

private void FormsListViewOnItemClick(object sender, AdapterView.ItemClickEventArgs itemClickEventArgs) 
    { 
     _cicoListView.SetItemChecked(itemClickEventArgs.Position, true); 
     for (var i = 0; i < _ciCos.Count; i++) 
     { 
      if (itemClickEventArgs.Position == i) 
      { 
       _selectedId = ((CicoModel)_cicoListView.Adapter.GetItem(i)).Pk; 
       //_formsListView.SetItemChecked(itemClickEventArgs.Position, true); 
      } 
      _cicoListView.GetChildAt(i)?.SetBackgroundColor(itemClickEventArgs.Position == i ? Color.LightGray : Color.Transparent); 
     } 
    } 

を得たものである私は、他の項目をスクロールダウン(それは私の最高の推測です)ので、あまり選択された場合

_cicoListView.ItemClick += FormsListViewOnItemClick; 

私が持っている唯一の問題はありますリストビューは行と位置を再利用します。助けを前にありがとう。あなたのListViewアダプタGetViewメソッドで

答えて

2

(またはあなたのRecyclerViewアダプタOnBindViewHolder方法で)、次のようにコードを挿入します。

public override View GetView(int position, View convertView, ViewGroup parent) 
{ 
    //inflate or restore convertView 
    if(this.myItems[position].selected == true) 
    { 
     convertView.SetBackgroundColor(Color.Green); 
    } 
    convertView.Click -= ChangeBackgroundColor; 
    convertView.Click += ChangeBackgroundColor; 
    // This is to avoid adding more than one EventHandler every time the View is shown in the ListView. 
} 

private void ChangeBackgroundColor(object sender, EventArgs e) 
{ 
    int position = this.recyclerView.GetChildAdapterPosition((View)sender); 
    this.myItems[position].selected = true; 
    ((View)sender).SetBackgroundColor(Color.Green); 
} 

また、この問題のように、背景にカスタム描画可能を使用していることを行うことができます:

Android: set list view item as "selected" (highlighted)

関連する問題