记录自己在项目中遇到的问题 项目需求是Listview加载CheckBox只能单选 一开始我是这么写的
holder.item_cb_section.setChecked(selectIndex == position ? true: false);
holder.item_cb_section.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (selectIndex == position)
((CheckBox) v).setChecked(true);
else if (selectIndex != -1) {
View item = mListView.getChildAt(selectIndex);
if (item != null) {
CheckBox ch = (CheckBox) item.findViewById(R.id.item_cb_section);
ch.setChecked(true);
}
}
selectIndex = position;
}
});
一开始没想到数据会有很多也没有去测试以为显示页面上可以实现单选就可以了没想到的测试一测就发现只要Listview一下滑就可以多选了所以在网上查了下写出如下代码
holder.item_cb_section.setId(position);
holder.item_cb_section.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//把上次被选中的checkbox设为false
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){//实现checkbox的单选功能,同样适用于radiobutton
if(temp!=-1){
//找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉
CheckBox tempCheckBox=(CheckBox)((Activity) mContext).findViewById(temp);
if(tempCheckBox!=null)
tempCheckBox.setChecked(false);
}
temp=buttonView.getId();//保存当前选中的checkbox的id值
}
}
});
虽然可以解决了我的单选问题但是发现点击事件不能用了 所以也算空欢喜了下 仔细研究了下还是把我之前的代码加上所以完整代码如下holder.item_cb_section.setId(position);
holder.item_cb_section.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//把上次被选中的checkbox设为false
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){//实现checkbox的单选功能,同样适用于radiobutton
if(temp!=-1){
//找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉
CheckBox tempCheckBox=(CheckBox)((Activity) mContext).findViewById(temp);
if(tempCheckBox!=null)
tempCheckBox.setChecked(false);
}
temp=buttonView.getId();//保存当前选中的checkbox的id值
}
}
});
//System.out.println("temp:"+temp);
//System.out.println("position:"+position);
if(position==temp)//比对position和当前的temp是否一致
holder.item_cb_section.setChecked(true);
else
holder.item_cb_section.setChecked(false);
//holder.item_cb_section.setChecked(selectIndex == position ? true: false);
holder.item_cb_section.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (selectIndex == position)
((CheckBox) v).setChecked(true);
else if (selectIndex != -1) {
View item = mListView.getChildAt(selectIndex);
if (item != null) {
CheckBox ch = (CheckBox) item.findViewById(R.id.item_cb_section);
// ch.setChecked(true);
}
}
selectIndex = position;
}
});
// ch.setChecked(true);
以上代码ch.setChecked(true);不能加如果加上的话当你点击第二个item的话会报错。