最近在做项目时用到listview中包括checkBox控件,当listview高度超出屏幕执行上下滑屏时之前被选中的checkBox会因为重新加载视图而被置为未选中;解决方法如下:
private Boolean[] isCheck;//解决checkBox回显问题
public ListAdapter(Context ctx,List<Map<String, String>> data){
this.context = ctx;
this.list = data;
isCheck = new Boolean[data.size()];
for(int i=0;i<isCheck.length;i++){
isCheck[i] = false;
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
HoldView holdView = null;
if(holdView == null){
holdView = new HoldView();
convertView = LayoutInflater.from(context).inflate(R.layout.export, null);
holdView.tvName = (TextView) convertView.findViewById(R.id.tv_export_name);
holdView.tvPhone = (TextView) convertView.findViewById(R.id.tv_export_phone);
holdView.cBox = (CheckBox) convertView.findViewById(R.id.cb_export_id);
convertView.setTag(holdView);
}else {
holdView = (HoldView) convertView.getTag();
}
holdView.tvName.setText(list.get(position).get("name"));
holdView.tvPhone.setText(list.get(position).get("phone"));
holdView.cBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
cbSelectName.add(list.get(position).get("name"));
cbSelectList.add(list.get(position).get("phone"));
isCheck[position] = true;
}else {
cbSelectName.remove(list.get(position).get("name"));
cbSelectList.remove(list.get(position).get("phone"));
isCheck[position] = false;
}
}
});
holdView.cBox.setChecked(isCheck[position]);
return convertView;
}
class HoldView{
ImageView imageView;
TextView tvName;
TextView tvPhone;
CheckBox cBox;
}