在实际的开发当中,我们会遇到 listview 中带有 checkbox的布局,可能会遇到几个问题.
1.listview 失去了点击效果
2.checkbox 无法实现单选效果
3.当选中了某一个 checkbox, 另一个 listview 也会被选中
对于第一个出现的问题,是因为 listview 的行布局中存在 button 之类的控件时, listview 的焦点会被该空间抢去,从而使 listview 本身失去焦点.
解决方法:在 listview 中的 行布局文件中的 xml 文件中将 button或 check 之类的控件焦点去掉,添加属性android:checkable="false" 和android:false able'"false" 即可
第二个问题可第三个问题一般是一起出现,实现单选不难,但是经常会出现第三个问题,原因是 listview 在绘制时复用了 convertview
解决方法:要持有 listview 被点击的行布局的 position, 这个 position 要点击的 position 不一样
直接上代码
holder.pay_way_lv_item_cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { //把上次被选中的checkbox设为false @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) {//实现checkbox的单选功能 if (temp != -1) { //找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉 CheckBox tempCheckBox = (CheckBox) context.findViewById(temp); if (tempCheckBox != null) tempCheckBox.setChecked(false); else temp = -1; } temp = buttonView.getId();//保存当前选中的checkbox的id值 if (position == temp) { finalHolder.pay_way_lv_item_cb.setChecked(true); } else { finalHolder.pay_way_lv_item_cb.setChecked(false); } } } });
代码中的 temp 为 int temp= -1; 定义成-1表示为被选中
希望对各位有所帮助,新手上路,不喜勿喷,谢谢!