ListView与Checkbox
2016-04-13 21:51
239 查看
/**
* listview解决checkbox复用问题
*
* 解决方案: 用一个集合动态记录每一个item的选中状态
*
* 切记:v.cb.setChecked(l.get(position));一定要设置在setOnCheckedChangeListener的后面
*
*
*
* 原因:当我们滑动到第一条数据不再显示开始显示下面的数据的时候,因为复用了convertView,
* 也就是当前item的和第一条item共用了第一条convertView,
* setChecked修改了CheckBox的状态,而此时此刻肯定会去回调
* OnCheckedChangeListener,
* 但是我们并没有给checkBox设置新的OnCheckedChangeListener,
* 也就是说,此时还是执行的以前的回调,这样就会把之前item的状态改变
* @athor Mneg
*
*/
* listview解决checkbox复用问题
*
* 解决方案: 用一个集合动态记录每一个item的选中状态
*
* 切记:v.cb.setChecked(l.get(position));一定要设置在setOnCheckedChangeListener的后面
*
*
*
* 原因:当我们滑动到第一条数据不再显示开始显示下面的数据的时候,因为复用了convertView,
* 也就是当前item的和第一条item共用了第一条convertView,
* setChecked修改了CheckBox的状态,而此时此刻肯定会去回调
* OnCheckedChangeListener,
* 但是我们并没有给checkBox设置新的OnCheckedChangeListener,
* 也就是说,此时还是执行的以前的回调,这样就会把之前item的状态改变
* @athor Mneg
*
*/
class Myadapter extends BaseAdapter{ private List<String> list; //记录每一个item的chekbox状态 private List<Boolean> l=new ArrayList<Boolean>(); public Myadapter(List<String> list){ this.list=list; //初始值都是未选中 for(int i=0;i<list.size();i++){ l.add(false); } } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return list.get(arg0); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { Vh v=null; if(convertView==null){ v=new Vh(); convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.itm_lv, null); v.cb=(CheckBox) convertView.findViewById(R.id.ck); convertView.setTag(v); }else{ v=(Vh) convertView.getTag(); } v.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean arg1) { //改变选择状态 if(arg1) { l.set(position, true); } else { l.set(position, false); } } }); //设置chekbox的选中状态 v.cb.setChecked(l.get(position)); return convertView; } class Vh{ CheckBox cb; } } }
相关文章推荐
- 1268 和为K的组合
- hadoop
- [置顶] Android studio 升级,完美更新到官方最新稳定版本
- 第八节 进程的切换和系统的一般执行过程—— 20135203齐岳
- stringstream转换CString为string出错
- (3)Java设计模式-单例模式(Singleton)
- HDU 5394 Trie in Tina Town
- 微信支付 WXPayEntryActivity的onResp(BaseResp resp)方法 跳转处理的问题
- ostream类的3个输出流对象cout,cerr,clog区别和使用
- ubuntu15.10 3D桌面
- 深入了解Handler消息机制(一)
- 手势监测器的使用
- Storm错误集
- Leetcode no. 81
- 数据结构实验之求二叉树后序遍历和层次遍历
- hdu 5182 PM2.5
- nrf51822开发指导之静态密钥配对--在SDK9.0的ble_app_uart例程修改
- 练习26 复杂链表拷贝
- ubuntu软件源-sources.list
- 数据库去重