解决 listview 中添加 checkbox 出现的问题

在实际的开发当中,我们会遇到 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();//保存当前选中的checkboxid            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表示为被选中


希望对各位有所帮助,新手上路,不喜勿喷,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值