CheckBox没有响应检查状态(Android Studio)

时间:2016-01-14 21:53:57

标签: java android checkbox ischecked

假设我有2个复选框(" checkbox1"和" checkbox2")并且我设置:SetChecked(true)For" checkbox1"和:SetChcked(false)为" checkbox2"。我的目的是关联它们并在我点击其中一个时切换检查状态,(如果"复选框1和#34;检查并且我检查了#34;复选框2"然后"复选框2&# 34;将被检查," checkbox1"将被取消选中,反之亦然) 这是我的代码:

require 'thread'

queue = Queue.new

producer = Thread.new do
  5.times do |i|
    sleep rand(i) # simulate expense
    queue << i
    puts "#{i} produced"
  end
end

consumer = Thread.new do
  5.times do |i|
    value = queue.pop
    sleep rand(i/2) # simulate expense
    puts "consumed #{value}"
  end
end

consumer.join

当我通过可见性运行应用程序时,当我点击&#34; ChckBoxYes&#34;它被检查了&#34; ChckboxNo&#34;未经检查,反之,它总是得到我在实现&#34; OnCheckedChangeListener&#34;之前设置的默认值。 (ChckBoxNo.SetChcked(true),ChckBoxYes.SetChecked(false),即使其对面和&#34; ChckBoxYes&#34;被chcked) 我该怎么办才能解决这个问题?  谢谢 !

1 个答案:

答案 0 :(得分:1)

这不是解决问题的正确方法。幸运的是,已经有一个名为RadioGroup的内置组件。你可以这样做:

让您的Activity的xml文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RadioGroup
        android:id="@+id/radio_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@+id/radio_button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="CheckBox1" />

        <RadioButton
            android:id="@+id/radio_button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="CheckBox2" />
    </RadioGroup>
</LinearLayout>

在您的活动中,您可以与此组件进行交互,并在点击任何RadioButton时处理您想要的任何内容:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == R.id.radio_button1) {
                    //First is checked
                } else if (checkedId == R.id.radio_button2) {
                    // Second is checked
                }
            }
        });
    }
}