Android(安卓)CheckBox使用所遇到的坑
16lz
2021-01-26
checkbox是我们开发中经常用到的选择控件
- 通过selector可以自定义checkbox选择样式
- 通过isChecked()方法,可以获取选中状态
- 通过setOnCheckedChangeListener监听选中改变状态
- setCheck(true/false)设置选中状态
- 可以setOnClickListener设置点击事件
说一下经常遇到的坑
- 焦点抢占事件
checkbox通常和listview一块使用的时候,item布局中使用checkbox,cb会抢占listview的item点击事件,解决方法:
给checkbox设置 android:focusable=”false”
在最外层父布局设置 android:descendantFocusability=”blocksDescendants”
2. setOnCheckedChangeListener()和setCheck()共同使用冲突问题
如果你代码中有根据数据设置checkbox选中状态,又同时监听了setOnCheckedChangeListener()方法,setChecked()时会触发此listener。
会造成页面checkbox选择错乱问题。
如果有setChecked()方法,此时,用setOnClickListener代替setOnCheckedChangeListener方法。
if (bean.isCheck()) { cb.setChecked(true); } else { cb.setChecked(false); } cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { cb.isChecked();//获取选中状态 } });
3. 结合listView多选使用
很多时候会结合列表多选使用checkbox,我们可以在列表数据对象中,自定义一个 ischeck字段,初始化为false,非选中状态,如果默认选中,同理初始化为true。
当我们点击checkbox改变状态时,手动调用改变ischeck字段值,最后通过遍历数据集合,判断ischeck字段来获取选中的条目。
class ItemBean{ private boolean isCheck;//选中状态 }//监听checkbox改变状态 cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { ItemBean.setCheck(true); } else { ItemBean.setCheck(false); } } });//最后筛选选中条目List- list;//初始时候所有值,遍历此集合 public List
getList() { Listdatas = new ArrayList<>();//创建新集合,用来存放选中的值 for (int i = 0; i < list.size(); i++) { if (list.get(i).isCheck()) { datas.add(as.get(i)); } } LogUtil.e("+++++++++++++++选中项" + datas.size(), ""); return datas; }
更多相关文章
- android浏览器研究-UserAgent
- Android(安卓)UI 常用控件讲解
- Android(安卓)ListView 滑动背景为黑色的解决办法
- Android控件
- Git在Android(安卓)Studio中的使用
- 7.2 android volley超时重试设置
- Android——自由拖动并显示文字的悬浮框实现
- compileSdkVersion, minSdkVersion 和 targetSdkVersion,坑爹的A
- Android(安卓)camera preview and take picture with V4l2