listview中checkbox的单选总结出两种实现方法,仅供参考
方法1:给checkbox做标记
注释:这个方法不便于后面的数据接入
public static int temp = -1;
checkBox = (CheckBox) parentView.findViewById(R.id.cbox_isselect);
//做个标记
checkBox.setId(groupPosition);
//checkbox监听
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
{
// 这段代码来实现单选功能
if (temp != -1)
{
CheckBox tempButton = (CheckBox) MyRingBoxActivity.this.findViewById(temp);
if (tempButton != null)
{
tempButton.setChecked(false);
}
}
//得到当前的position
temp = buttonView.getId();
} else {
temp = -1;
}
}
});
//将选中的设置为true
if (temp == groupPosition) {
checkBox.setChecked(true);
}
方法二:把所有的选中未选中的信息放入到HashMap<Integer,Boolean>中通过适配器的构造方法传入
注释:本以为这种方式会性能比较差,不过在真机上的效果还是可以的
public RingBoxElvAdapter(Context context, List<String> parent_data, List<List<SongInfo>> child_data,HashMap<Integer, Boolean> isSelect) {
this.mContext = context;
this.inflater1 = LayoutInflater.from(context);
this.inflater2 = LayoutInflater.from(context);
this.parent_data = parent_data;
this.child_data = child_data;
this.isSelect=isSelect;
}
checkBox = (CheckBox) parentView.findViewById(R.id.cbox_isselect);
checkBox.setChecked(isSelect.get(groupPosition));
//监听
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//先把链表中的数据取代掉
isSelect.put(groupPosition, isChecked);
if(buttonView.isChecked())
{
for(int i=0;i<str_parent.size();i++)
{
//把其他的checkbox设置为false
if(i!=groupPosition){
isSelect.put(i, false);
}
}
}
//通知适配器更改
RingBoxElvAdapter.this.notifyDataSetChanged();
}
});