【问题标题】:Xamarin Android ListView select item and change row colorXamarin Android ListView 选择项目并更改行颜色
【发布时间】:2017-05-30 22:32:51
【问题描述】:

我是 xamarin 的新手,我一直在到处寻找一种方法来选择 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);
        }
    }

这个方法是item的点击处理程序

 _cicoListView.ItemClick += FormsListViewOnItemClick;

我遇到的唯一问题是,当我向下滚动时,其他项目也被选中,因为(这是我的最佳猜测)列表视图会循环使用行和位置。提前感谢您的帮助。

【问题讨论】:

    标签: c# listview xamarin xamarin.android


    【解决方案1】:

    在您的 ListView Adapter GetView 方法中(或在您的 RecyclerView Adapter 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)

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多