当我在 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#;
下面是我在适配器 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#;