2017-05-30 273 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; 

我唯一的問題是,當我向下滾動,其他項目都選擇了太多,因爲(這是我最好的猜測)列表視圖可以回收行和位置。先謝謝您的幫助。

回答

2

在你的ListView適配器GetView方法(或在您的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)

相關問題