1、RadioGroup设置默认选择,出现选中两个的问题
场景:RadioButton无id情况下,设置RadioGroup其中一个RadioButton默认选中,即android:checked=“true”,切换选项的时候默认选中项一直处于选中状态,出现两个子项同时被选中的情况
解决办法1:给RadioGroup 设置选中的RadioButton,例:
selectRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
selectRadioGroup.check(checkedId);//改变选中子项时切换状态
}
});
解决办法2:给默认选中的RadioButton增加一个id也能解决该问题。
另外,
多次进入页面checkedId会按RadioGroup的RadioButton数量增长,设置默认选中,默认选中的RadioButton的id会变为一个很大的值。可通过RadioButton的文字或id比较判断当前被选中的RadioButton:
// 实例化控件
sex = (RadioGroup) findViewById(R.id.sex);
// 方法一,通过比较文字获取选中状态的RadioButton控件
sex.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// 获取选中的RadioButton的id
int id = group.getCheckedRadioButtonId();
// 通过id实例化选中的这个RadioButton
RadioButton choise = (RadioButton) findViewById(id);
// 获取这个RadioButton的text内容
String output = choise.getText().toString();
Toast.makeText(MainActivity.this, "你的性别为:" + output, Toast.LENGTH_SHORT).show();
}
});
// 方法二,通过比较checkedId与实例化的xml中的RadioButton的ID进行判断,找出选中状态的RadioButton控件
hobby.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (baskeball.getId() == checkedId) {
shuchu = baskeball.getText().toString();
}
if (table_tennis.getId() == checkedId) {
shuchu = table_tennis.getText().toString();
}
if (badminton.getId() == checkedId) {
shuchu = badminton.getText().toString();
}
Toast.makeText(MainActivity.this, "你喜欢的体育运动为:" + shuchu, Toast.LENGTH_SHORT).show();
}
});