自定义ListView item包含checkbox实现单选记录自己开发是遇到的问题

记录自己在项目中遇到的问题  项目需求是Listview加载CheckBox只能单选 一开始我是这么写的

holder.item_cb_section.setChecked(selectIndex == position ? true: false);
		holder.item_cb_section.setOnClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			if (selectIndex == position)
				((CheckBox) v).setChecked(true);
			else if (selectIndex != -1) {
				View item = mListView.getChildAt(selectIndex);
				if (item != null) {
					CheckBox ch = (CheckBox) item.findViewById(R.id.item_cb_section);
				ch.setChecked(true);
				}
			}
			selectIndex = position;
		}
	});
一开始没想到数据会有很多也没有去测试以为显示页面上可以实现单选就可以了没想到的测试一测就发现只要Listview一下滑就可以多选了所以在网上查了下写出如下代码

	holder.item_cb_section.setId(position);
		holder.item_cb_section.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			//把上次被选中的checkbox设为false
		      @Override
		      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		        if(isChecked){//实现checkbox的单选功能,同样适用于radiobutton
		          if(temp!=-1){
		            //找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉
		            CheckBox tempCheckBox=(CheckBox)((Activity) mContext).findViewById(temp);
		            if(tempCheckBox!=null)
		              tempCheckBox.setChecked(false);
		          }
		          temp=buttonView.getId();//保存当前选中的checkbox的id值		
		        }
		      }
		    });
虽然可以解决了我的单选问题但是发现点击事件不能用了 所以也算空欢喜了下 仔细研究了下还是把我之前的代码加上所以完整代码如下
holder.item_cb_section.setId(position);
		holder.item_cb_section.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			//把上次被选中的checkbox设为false
		      @Override
		      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		        if(isChecked){//实现checkbox的单选功能,同样适用于radiobutton
		          if(temp!=-1){
		            //找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉
		            CheckBox tempCheckBox=(CheckBox)((Activity) mContext).findViewById(temp);
		            if(tempCheckBox!=null)
		              tempCheckBox.setChecked(false);
		          }
		          temp=buttonView.getId();//保存当前选中的checkbox的id值		
		        }
		      }
		    });
		    //System.out.println("temp:"+temp);
		    //System.out.println("position:"+position);
		    if(position==temp)//比对position和当前的temp是否一致
		    	holder.item_cb_section.setChecked(true);
		    else 
		    	holder.item_cb_section.setChecked(false);
		//holder.item_cb_section.setChecked(selectIndex == position ? true: false);
		holder.item_cb_section.setOnClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			if (selectIndex == position)
				((CheckBox) v).setChecked(true);
			else if (selectIndex != -1) {
				View item = mListView.getChildAt(selectIndex);
				if (item != null) {
					CheckBox ch = (CheckBox) item.findViewById(R.id.item_cb_section);
				//	ch.setChecked(true);
				}
			}
			selectIndex = position;
		}
	});
//	ch.setChecked(true);
以上代码ch.setChecked(true);不能加如果加上的话当你点击第二个item的话会报错。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值