取消选中单选按钮

时间:2013-04-04 20:43:59

标签: android if-statement radio-button checked uncheck

该应用程序是一个步进音序器应用程序,具有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);
            }
        });

3 个答案:

答案 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(); 
}