当我在 xamarin 中滚动列表视图时,选中的复选框未选中 android

Checked checkboxes is unchecked when i scroll listview in xamarin android

下面是我在适配器 class 中的 GetView() 方法,当我通过选择一个复选框滚动列表视图时。滚动回到初始位置后,选中的复选框将取消选中。

    public override View GetView (int position, View convertView, ViewGroup parent)
    {
        View view = convertView; 
        var item = mMyList [position];
        //View holder
        MyViewHolder holder = null;
        if (view == null) {
            holder = new MyViewHolder ();
            view = mcontext.LayoutInflater.Inflate (Resource.Layout.listview_layout, null);
            holder.mChecked = view.FindViewById<CheckBox> (Resource.Id.chkBox);
            holder.Name = view.FindViewById<TextView> (Resource.Id.Name);
            holder.StartDate = view.FindViewById<TextView> (Resource.Id.startDate);
            holder.EndDate = view.FindViewById<TextView> (Resource.Id.endDate);
            holder.Desc = view.FindViewById<TextView> (Resource.Id.Desc);
            view.SetTag (holder);
        } else {
            holder = (MyViewHolder)view.Tag;
        }
        holder.Name.SetText (item.Name, TextView.BufferType.Normal);
        holder.StartDate.SetText (item.StartDate, TextView.BufferType.Normal);
        holder.EndDate.SetText (item.EndDate, TextView.BufferType.Normal);
        holder.Desc.SetText (item.Description, TextView.BufferType.Normal);
        return view;
    }

很简单!
你只需要存储这个 "states" 的复选框,因为每次滚动你的 listview 时,都会调用 GetView 方法(绘制隐藏的项目,Android 重用行).

在您的 DataContext 中,例如List<MyClass> ,其中 MyClass 代表:

 public class MyClass
    {
        public string Name {get;set;}
        public string SecondName {get;set;}
        public bool IsChecked {get;set;}
    }

尝试为 Checkbox 的状态添加 bool 属性(在本例中为 IsChecked)。
在此之后,在您的 GetView 方法 中写下类似这样的内容:

holder.mChecked.Checked = MyList [position].#YourBoolProperty#; 

顺便说一句,我只是即时写的。
另外,如果您不清楚,请尝试检查 this or this.
希望对您有所帮助!