首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

关于ListView与CheckBox的组合(精华版)

2012-09-25 
关于ListView与CheckBox的结合(精华版)关于通过ListView将数据绑定到复选框的问题的总结问题来源:1 选中第

关于ListView与CheckBox的结合(精华版)
关于通过ListView将数据绑定到复选框的问题的总结
问题来源:
1 选中第一页的第2,3个复选框,当翻到第二页的时候其相同位置也被选中
? 解决思路:绝不能依靠复选框的被选中来删除黑名单号码(原因见上面分析),而依靠哪个数据被选中来删除黑名单.那么怎么知道这个数据? 是否被选中呢?就是通过
??????????? CheckBox的被选状态来提示用户的。所以说CheckBox只是起到一个显示作用!!
? 解决办法:自定义SimpleAdapter类,重写getView()方法。而且借用了外部的全局的balckNumberIsCheckedMap保存了每个电话号码的状态,初始时均未被选中。
??????????? 重写getView()方法的目的:
??????????? (1)实现数据的绑定checkBox.setText(blacknumber);//这里就是绑定的实质。把这个电话号码绑定到了ListView的这个checkbox上
??????????? (2)为CheckBox赋予初始状态(初始状态均为未被选中)
??????????? boolean isChecked=balckNumberIsCheckedMap.get(id);
??????????? checkBox.setChecked(isChecked);
2 通过实现对于条目点击事件的监听,我们在点击条目的时候可知道是背后的那条数据被点击
? 即HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);于是就可以修改此号码在balckNumberIsCheckedMap中的状态
? 从而用此状态来决定复选框CheckBox的状态,这样的话点击几个条目去实现删除的时候遍历balckNumberIsCheckedMap查看哪些号码被选中,把选中的删除即可。
? 这样带来了第二个问题:点击条目的时候,其实没有真正地点击到条目,而是点击了复选框CheckBox,因为复选框的优先级很高。?
? 解决办法:在布局文件中使复选框不可以被点击,不可以被触摸,不可以获得焦点!!!于是在点击条目的时候就真的是在点击条目了!!!!!!!!
? 于是可以这样处理条目点击事件:
? (1) 在点击的时候切换复选框状态checkBox.toggle();每点击条目都会切换此状态;然后得到复选框现在的状态即boolean itemIsCheck=checkBox.isChecked();
? (2) 得到当前被点击电话号码即HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);
? (3) 得到号码的ID即int blackNumberId=(Integer) itemHashMap.get("id");
? (4) 然后修改此号码在balckNumberIsCheckedMap中的状态即balckNumberIsCheckedMap.put(blackNumberId, itemIsCheck);
? 这样就实现了形式与内容的统一,复选框的状态发生了变化,而且正确体现了实际情况。
? 核心代码如下:
??????????????? checkBox.toggle();
??????????????? boolean itemIsCheck=checkBox.isChecked();//得到checkBox目前的状态
? HashMap<String,Object> itemHashMap=(HashMap<String, Object>) lv.getItemAtPosition(position);//得到ListView被点击条目所绑定的HashMap?
? int blackNumberId=(Integer) itemHashMap.get("id");
? balckNumberIsCheckedMap.put(blackNumberId, itemIsCheck);? 当我们执行删除的时候:其实就是去HashMap<Integer, Boolean> balckNumberIsCheckedMap看哪些数据被选中了,若被选中就删除它们。?本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lfdfhl/archive/2011/02/09/6175269.aspx?

热点排行