当我在xamarin android中滚动listview时,未选中复选框

时间:2015-10-28 13:58:51

标签: xamarin xamarin.android xamarin-studio

下面是适配器类中的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;
    }

1 个答案:

答案 0 :(得分:1)

很简单!
你只需要存储这个&#34;状态&#34;复选框,因为每次滚动 listview 时,都会调用GetView方法(绘制隐藏项,Android重用行)。

在您的DataContext中,例如列表与LT;的 MyClass的&GT; ,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#; 

顺便说一句,我只是在飞行中写下这一点 此外,如果您无法清除某些内容,请尝试检查thisthis
希望有所帮助!