Android实现RadioGroup中的RadioButton再次点击取消选中
来源:互联网 发布:5位电话 知乎 编辑:程序博客网 时间:2024/04/30 02:39
项目中遇到一个问题,需要使RadioGroup中的RadioButton在点击已选中的button时使其变为未选中。
网上找了一些解决方案,不是很理想,最后自己用CheckBox加一些控制逻辑实现了上述效果。
示例:
layout文件:
<LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:orientation="horizontal" android:paddingLeft="10dp"> <CheckBox android:id="@+id/id_cb_laohua" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:background="@drawable/cb_background" android:gravity="center" android:text="老化" android:textSize="20sp" /> <CheckBox android:id="@+id/id_cb_texing" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:gravity="center" android:background="@drawable/cb_background" android:text="特性" android:textSize="20sp" /> <CheckBox android:id="@+id/id_cb_pingce" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:background="@drawable/cb_background" android:gravity="center" android:text="评测" android:textSize="20sp" /> </LinearLayout>
Java代码
cb_laohua = (CheckBox) view.findViewById(R.id.id_cb_laohua);typeCheckBoxList.add(cb_laohua); cb_texing = (CheckBox) view.findViewById(R.id.id_cb_texing);typeCheckBoxList.add(cb_texing); cb_pingce = (CheckBox) view.findViewById(R.id.id_cb_pingce);typeCheckBoxList.add(cb_pingce); //三个CheckBox使用同一个监听 TypeCheckBoxListener typeCheckBoxListener = new TypeCheckBoxListener(); cb_laohua.setOnCheckedChangeListener(typeCheckBoxListener); cb_texing.setOnCheckedChangeListener(typeCheckBoxListener); cb_pingce.setOnCheckedChangeListener(typeCheckBoxListener); ..... /** * 将一组CheckBox设置同一个监听器对象 * 在监听器中监听发生状态改变的CheckBox,经过一系列判断 * 通过对静态全局变量赋值的形式将用户的最终选择传递出去 * * 注意:由于要模拟RadioGroup+RadioButton的效果,所以要做到以下两点: * 1. 一组按钮只能同时选中一个 * 2. 点击已选中的按钮要能够取消选中 * * 实现要点:每次触发监听时检查是否有按钮被选中,如果没有,直接赋值然后return。如果有,判断该次触发是选中还是取消选中 * 如果是取消选中,不执行任何逻辑。如果是选中,则赋值出去,然后将其他的按钮置false。这个时候之前选中的按钮由于被置false, * 状态发生改变,所以会再触发一次监听。但由于其状态是false,所以不会执行任何逻辑。这点很重要,所以前面赋值出去前一定要先检查状态 * 如果为false,就不要再对赋值进行任何改变了。 * */ private class TypeCheckBoxListener implements CompoundButton.OnCheckedChangeListener{ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (!cb_laohua.isChecked()&&!cb_texing.isChecked()&&!cb_pingce.isChecked()){ type = 0; return; } switch (buttonView.getId()){ case R.id.id_cb_laohua: if (isChecked) { type = R.id.id_cb_laohua; cb_texing.setChecked(false); cb_pingce.setChecked(false); } break; case R.id.id_cb_texing: if (isChecked) { type = R.id.id_cb_texing; cb_laohua.setChecked(false); cb_pingce.setChecked(false); } break; case R.id.id_cb_pingce: if (isChecked) { type = R.id.id_cb_pingce; cb_laohua.setChecked(false); cb_texing.setChecked(false); } break; } } }
上述代码中,通过对全局变量type的赋值来将用户的选择传递出去,给其他方法使用。
妈蛋,怎么MarkDown的格式到处都不一样啊,代码格式每次都要调整。
2017.05.24 更新:
今天重看项目中的这块代码,突然觉得好傻逼,搞这么复杂的逻辑判断。直接RadioGroup+RadioButton+少量逻辑判断不就好了嘛!每次点击RadioButton后先判断下自身的状态,如果是checked,那么直接setChecked(false),如果是unChecked,说明同组有别的item被check了,那就调用RadioGroup的clearCheck(),然后再对自己setChecked(true)就可以了。
阅读全文
1 0
- Android实现RadioGroup中的RadioButton再次点击取消选中
- RadioButton再次点击取消
- radio点击选中,再次点击取消选中
- Android只有一个RadioButton点击后取消选中
- Delphi关于RadioButton的按键事件与再次点击时取消选中
- RadioGroup中的RadioButton实现换行
- Android 如何获取RadioGroup选中RadioButton监听
- Android自定义RadioGroup中的RadioButton
- Android RadioButton RadioGroup 中的坑
- RadioGroup实现点击的RadioButton项变色
- Jquery实现,点击选中,点击取消选中
- Android ListView中的项中包含RadioGroup时,RadioButton混乱选中的问题的解决方法
- Android RadioGroup中的RadioButton无法选中问题的一种处理方式
- easyui datagrid行选中情况下,再次点击取消选中。
- 关于RadioGroup中的radiobutton选中状态保存的问题!!
- Android 如何获取RadioGroup选中RadioButton的内容
- Android开发—RadioGroup中RadioButton默认选中问题
- Android 如何获取RadioGroup选中RadioButton的内容
- jQuery之动画效果(动画基础隐藏和显示,上卷下拉效果 ,淡入淡出效果 ,动画切换的比较,自定义动画,jQuery核心)
- 排序算法——二元选择排序
- 二叉查找树总结
- android手机裸眼3D技术原理和编程实现
- C.Primer.Plus(第六版)第八章 编程练习
- Android实现RadioGroup中的RadioButton再次点击取消选中
- 出现:Error creating bean with name 'xxxxxController': Injection of autowired dependencies failed;
- jQuery操作DOM对象
- 对照Startup.s学习ARM汇编指令
- 图片的懒加载,预加载,色彩预制加载
- Sequential Match Network: A New Architecture for Multi-turn Response Selection in Retrieval-based Ch
- 第十三周:( Sicily1402) Panic Room(c++)
- 欢迎使用CSDN-markdown编辑器
- C++实验--数组2