该应用程序是一个步进音序器应用程序,具有16个无线电组,每组有8个按钮。除非我使用我创建的清除按钮清除所有放射线组,否则除非一组选择了一个按钮,否则它可以完美地工作。我想要添加的是一些代码,表示当再次选择所选单选按钮时,它会像切换一样关闭。我尝试使用切换,但随后出现了其他问题。下面是对它的一次尝试,但是我猜错了
final RadioGroup radioGroup1 = (RadioGroup)findViewById(R.id.RadioGroup1);
RadioButton lC1 = (RadioButton)findViewById(R.id.RadioButtonlowC1);
Button D1 = (Button)findViewById(R.id.RadioButtonD1);
D1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PdBase.sendFloat("D1", 74);
int selectedTypeId = radioGroup1.getCheckedRadioButtonId();
RadioButton D1 = (RadioButton) findViewById(selectedTypeId);
if(radioGroup1 != null) // This will be null if none of the radio buttons are selected
radioGroup1.clearCheck();
PdBase.sendFloat("D1", 0);
}
});
答案 0 :(得分:22)
请查看我对您的其他basically identical question的回复,我已将其复制到下方......:)
我最近有同样的需求 - 拥有一个无线电组,通过再次点击它可以取消选择所选项目。我发现我无法使用听众完成这项工作,但我 能够使用自定义RadioButton
来完成它,就像这样...
public class ToggleableRadioButton extends RadioButton {
// Implement necessary constructors
@Override
public void toggle() {
if(isChecked()) {
if(getParent() instanceof RadioGroup) {
((RadioGroup)getParent()).clearCheck();
}
} else {
setChecked(true);
}
}
}
请注意,该按钮会根据其当前状态以不同方式切换 - 即,在按钮上调用setChecked(true)
与在群组上调用clearCheck()
。如果在两种情况下都使用setChecked()
,则无法立即重新选择刚取消选择的按钮 - RadioGroup
中的逻辑会阻止它。
要使用此按钮,只需在布局XML中将<RadioButton>
标记替换为<your.package.ToggleableRadioButton>
。
答案 1 :(得分:1)
您需要将按钮放在广播组中,然后清除该组。无法直接取消选中单选按钮,因为我们的想法是始终检查组中的一个选项。
答案 2 :(得分:1)
以下是如何创建radiogroup,radiobutton以及如何在Java代码中使用的示例。希望它能给你完整的图片
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RadioGroup
android:id="@+id/maptype"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/line1"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/map"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:drawableRight="@drawable/ic_launcher"/>
<RadioButton
android:id="@+id/satellite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableRight="@drawable/ic_launcher"/>
</RadioGroup>
</LinearLayout>
在Java代码中
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
RadioGroup rgrpMapType = (RadioGroup) findViewById(R.id.maptype);
int selectedTypeId = rgrpMapType.getCheckedRadioButtonId();
RadioButton rbMapType = (RadioButton) findViewById(selectedTypeId);
if(rbMapType != null) // This will be null if none of the radio buttons are selected
rgrpMapType.clearCheck();
}