首先我先说一下:
checkbox有状态改变监听和点击监听事件:
// 状态改变监听事件
ch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { Log.v("aaa", "read is checked"); } else { Log.v("aaa", "read is unchecked"); } } });//点击监听事件
ch1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (((CheckBox) v).isChecked()) { Log.v("aaa", "read is checked qqqq"); } else { Log.v("aaa", "read is unchecked"); } } });区别就在于:假如你对一个控件进行状态监听时,它的状态在别的监听中进行改变,这样它就会走
setOnCheckedChangeListener里面的方法。 而setonclintent不会。
checkbox的全选和反选:
首先建一个bean对象,封装到list集合里,然后给个默认值。
checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean falg = ((CheckBox) v).isChecked(); if(falg) { for (int i=0;i<list_lead.size();i++) { list_lead.get(i).setB1(true); } m1.notifyDataSetChanged(); } else{ for (int i=0;i<list_lead.size();i++) { list_lead.get(i).setB1(false); } m1.notifyDataSetChanged(); } } });//构造有参里可以传控件。
holder.iteam_check.setChecked(list_lead.get(position).getB1()); holder.iteam_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean falg = ((CheckBox) v).isChecked(); boolean f=true; if(!falg){ list_lead.get(position).setB1(false); }else{ list_lead.get(position).setB1(true); } for(int i =0;i<list_lead.size();i++){ if(!list_lead.get(i).getB1()){ f=false; checbox.setChecked(false); return; } } if(f){ checbox.setChecked(true); } } }); holder.iteam_check.setChecked(list_lead.get(position).getB1()); // 多写这个可以防止条目的复用!