假如ListView,分红2页(或者设置数据能够纵向拉,可隐藏),每页3条数据,每一个Listview的Item 里面有个checkBox,如今,当我选择第一页的前两天数据,翻到第二页,居然第二页后两条数据也选中了,这是绝对不容许的。通过本人的N次调试,发现public View getView(int position, View convertView, ViewGroup parent)传进来的convertView居然产生屡次重用。解决方案:当选中checkedBox时候,咱们用一个List来保存该checkBox的position。而后在每次产生View时取得传来的convertView赋值为null,再遍历List里保存的checkBox的位置,当在数组内时,checkBox置为选中,问题解决了。html
该问题有解决方案,我的目前所实现了的。android
HashMap<Integer, Boolean> state = new HashMap<Integer,Boolean>(); public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked) { state.put(position, isChecked); System.out.println("复选框以选中,选中的行数为:" + temp_position); }else{ state.remove(position); } }
在getView()方法里面:git
holder.cbox.setChecked(state.get(position)==null? false : true);
private static List<String> selected = new ArrayList<String>(); cbSelect.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (cbSelect.isChecked()) { selected.add(String.valueOf(fid)); } else if (!cbSelect.isChecked()) { selected.remove(String.valueOf(position)); } } });
在getView()方法里面:github
cbSelect.setChecked((selected.contains(String.valueOf(position))));
public View getView(int position, View convertView, ViewGroup parent)在每次传进convertView时候,设为null。数组
而后每调用一次getView就产生一个view对象。ide
快速实现Android多级树形列表,这个库是在鸿洋多级树形列表demo中修改而来。调试
解决的问题:code
支持ID为int类型和String类型。htm
支持多级复选框选中,使用只需一行代码。
支持动态更新数据并保持原有展开/关闭状态。
支持ListView、RecyclerView。