Android实现RadioGroup中的RadioButton再次点击取消选中
2017-05-18 23:24
477 查看
项目中遇到一个问题,需要使RadioGroup中的RadioButton在点击已选中的button时使其变为未选中。
网上找了一些解决方案,不是很理想,最后自己用CheckBox加一些控制逻辑实现了上述效果。
示例:
上述代码中,通过对全局变量type的赋值来将用户的选择传递出去,给其他方法使用。
妈蛋,怎么MarkDown的格式到处都不一样啊,代码格式每次都要调整。
2017.05.24 更新:
今天重看项目中的这块代码,突然觉得好傻逼,搞这么复杂的逻辑判断。直接RadioGroup+RadioButton+少量逻辑判断不就好了嘛!每次点击RadioButton后先判断下自身的状态,如果是checked,那么直接setChecked(false),如果是unChecked,说明同组有别的item被check了,那就调用RadioGroup的clearCheck(),然后再对自己setChecked(true)就可以了。
网上找了一些解决方案,不是很理想,最后自己用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_laoh 4000 ua = (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)就可以了。
相关文章推荐
- jquery实现radio按钮在分组状态下点击选中,再次点击取消选中
- Android RadioGroup中的RadioButton无法选中问题的一种处理方式
- Android 使用RadioGroup和RadioButton实现单选效果
- Android 如何获取RadioGroup选中RadioButton监听
- RadioGroup和Fragment相结合实现点击RadioButton进行Fragment的切换
- Android 使用ViewPager和RadioGroup配合Fragment实现标签页,可点击按钮切换、滑动切换。
- Android布局中有两个RadioGroup的RadioButton选中问题
- Android只有一个RadioButton点击后取消选中
- Android进阶之路 - RadioGroup与RadioButton快速实现底部导航
- radio 实现点击两次 第一次点击选中第二次点击取消
- Android 如何获取RadioGroup选中RadioButton的内容
- Android RadioGroup中设置默认选中RadioButton 后,选中两个的问题 解决方法
- radio实现第一次点击选中第二次点击取消
- android RadioGroup实现单选以及默认选中
- 利用RadioGroup和RadioButton实现单选且选中的效果自定图片
- android radiogroup 中 某个radiobutton设置不可更改设置 但是点击会有提示 的 方法
- Android控件笔记——使用RadioGroup和RadioButton实现单选效果
- Android自定RadioGroup实现点击切换效果
- Android开发自定RadioGroup实现多布局重叠并单选&修改radioButton按钮样式
- RadioGroup动态添加RadioButton,RadioButton设置默认选中第一个,点击其他的RadioButton第一个不再选中,第一个不再选中