在listview中设置 CheckBox当其中一个CheckBox被选中时候,会导致下面的item中的CheckBox被选中(实际上为被选中),原因是在listview中会对item进行复用,导致CheckBox也被复用。
一般通过设置一个HashMap集合用来存储选中item的对象的唯一标识符position,在getView()中判断HashMap中是否存在position。存在则设置为checked,否则设置为unchecked。核心代码如下:
HashMap<Integer, Boolean> state = new HashMap<Integer, Boolean>();
holder.cbCheckhop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { if (isChecked) { stateItem.put(position,isChecked); } else { stateItem.remove(position); } } }); holder.cbCheckhop.setChecked(stateItem.get(position) == null ? false : true);