2019独角兽企业重金招聘Python工程师标准>>>
假如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置为选中,问题解决了。
该问题有解决方案,个人目前所实现了的。
1.用HashMap保存checkbox的状态值。
HashMap state = new HashMap();
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()方法里面:
holder.cbox.setChecked(state.get(position)==null? false : true);
2.用List保存checkbox位置
private static List selected = new ArrayList();
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()方法里面:
cbSelect.setChecked((selected.contains(String.valueOf(position))));
3.(不推荐使用,因为会产生许多垃圾对象)
public View getView(int position, View convertView, ViewGroup parent)在每次传进convertView时候,设为null。
然后每调用一次getView就产生一个view对象。
多级树形列表:
更快实现Android多级树形选择列表
快速实现Android多级树形列表,这个库是在鸿洋多级树形列表demo中修改而来。
解决的问题:
-
支持ID为int类型和String类型。
-
支持多级复选框选中,使用只需一行代码。
-
支持动态更新数据并保持原有展开/关闭状态。
-
支持ListView、RecyclerView。
项目地址:https://github.com/zhangke3016/MultilevelTreeList