单选按钮不会切换其状态

时间:2010-07-26 19:38:06

标签: android

我在布局中添加了一个RadioButton。

一开始就没有检查。当我点击它时,它会被检查(如模拟器中所示)。但是,当我再次点击它时,它不会再次被取消选中?

<RadioButton android:checked="false"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:id="@+id/option1"/>

6 个答案:

答案 0 :(得分:9)

如果您正在寻找具有单选按钮外观的复选框行为,则可以将xml样式传递给复选框。

<CheckBox android:checked="true"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/option1"
         style="@android:style/Widget.DeviceDefault.Light.CompoundButton.RadioButton/>

这在某些情况下很有用(例如在RecyclerView中使用单选按钮),但是您应该小心,因为用户希望单选按钮以某种方式运行。如果您允许用户进行多项选择,您应该使用正常的复选框,如上面的评论中所述。

希望这有帮助!

答案 1 :(得分:5)

如果你只使用一个收音机盒来检查和关闭,也许你应该使用复选框或切换按钮。

http://developer.android.com/resources/tutorials/views/hello-formstuff.html

向下滚动并查看复选框和切换按钮。

使用无线电时,您通常会有多个无线电,并在它们之间进行选择。喜欢简单,中等,坚硬。

答案 2 :(得分:3)

如果您有多个单选按钮可供使用,请按如下方式添加“RadioGroups”:

<RadioGroup android:id="@+id/group1" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:orientation="vertical">
        <RadioButton android:id="@+id/radio1" android:text="madras"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />
        <RadioButton android:id="@+id/radio2" android:text="bombay"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />
    </RadioGroup>

看一下这个example ,我相信这会让你的想法明确 Radio Buttons

另请参阅此Android Developer - Form Stuff page

答案 3 :(得分:1)

这是一个概念性问题:单选按钮允许您在几个选项之间进行选择(由其他单选按钮表示)。通常,始终检查组中的一个单选按钮,即使在初始状态下,如果未将一个按钮声明为默认值,也不会检查按钮。这也意味着单个按钮不允许切换其状态,除非同一组中存在其他单选按钮 - 如果只有一个选项,则必须选择它。

如果您想要二进制切换,则需要使用复选框。

答案 4 :(得分:1)

在Java代码中设置检查[true / false]中间的解决方案

ToggleButton t = (ToggleButton) findViewById(R.id.toggle_button);
t.setChecked(true); 
// t.setChecked(false);

答案 5 :(得分:1)

在搜索了很多东西之后,我想出了一个不那么好但很体面的解决方法。

为每个RadioButton声明一个boolean变量,用false初始化它,并在每次点击时更改变量和RadioButton的状态。

boolean isToggledRadio1 = false;
RadioButton radio1 = (RadioButton) findViewById(R.id.radiobutton1);
radio1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        isToggledRadio1 = !isToggledRadio1; //Switch boolean value
        RadioButton rb = (RadioButton)v;
        rb.setChecked( isToggledRadio1 );
    }
});
  1. 我知道使用Checkbox是理想的选择,但是如果有人需要radiobutton,那么他们需要使用单选按钮。

  2. 这不是最佳解决方案,因为每次用户点击按钮时基本上都会切换按钮两次(一种是默认行为,第二次是在你的onclick功能中),所以如果你使用OnCheckedChangeListener,你可能会收到两次同一次点击的电话。

  3. 还有另一种解决方法,即使用xml模板将复选框中的android:button更改为另一个drawable,但它有点复杂,需要至少2个以上各州的档案。