Kotlin Android RadioButton实现单选互斥及点击参数传递问题
问题原因及解决方法
1. RadioButton无法互斥的核心原因
RadioButton要实现单选互斥的前提是必须将多个RadioButton放在同一个RadioGroup容器下,如果你的布局里这两个RadioButton是直接写在LinearLayout、ConstraintLayout等其他布局下,没有被RadioGroup包裹,就会出现可同时选中的问题。
你需要修改布局XML文件,结构参考如下:
<RadioGroup android:id="@+id/radioGroupJenisKelamin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/radioButtonLakiDaftar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Laki-laki" /> <RadioButton android:id="@+id/radioButtonPerempuanDaftar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Perempuan" /> </RadioGroup>
2. 代码逻辑优化及参数问题解答
你现有代码的两处问题:
- 首先
onRadioButtonClicked方法本质是RadioButton的点击回调,不需要你手动在pendaftaran方法里调用传参,你可以选择两种方式绑定回调:- 在XML的RadioButton标签里添加属性
android:onClick="onRadioButtonClicked",此时点击RadioButton时系统会自动将被点击的View作为参数传入该方法 - 更推荐直接在Activity里给RadioGroup设置选中监听,不需要单独给每个RadioButton设置点击事件,写法更简洁:
- 在XML的RadioButton标签里添加属性
private fun pendaftaran( ) { val namaForm = findViewById<EditText>(R.id.inputNama) val tglLahirForm = findViewById<EditText>(R.id.inputTglLahir) val radioGroup = findViewById<RadioGroup>(R.id.radioGroupJenisKelamin) // 获取选中的RadioButton值 val selectedGenderId = radioGroup.checkedRadioButtonId val selectedGender: String = when(selectedGenderId) { R.id.radioButtonLakiDaftar -> findViewById<RadioButton>(selectedGenderId).text.toString() R.id.radioButtonPerempuanDaftar -> findViewById<RadioButton>(selectedGenderId).text.toString() else -> "" // 处理未选中的情况 } }
- 你原先写的
onRadioButtonClicked方法里,getLaki.toString()和getPerempuan.toString()只是读取了值没有做存储/返回,实际调用也拿不到选中结果,直接用上述RadioGroup监听的方式即可更高效地拿到选中值。
内容的提问来源于stack exchange,提问作者Sadamuhiz
相关产品推荐
相关产品推荐

