我正在尝试使用setChecked()进行单选按钮切换。
setChecked(false)工作正常,但setChecked(true)不起作用。
还尝试了toggle(),即使这样也没有取消选中单选按钮。
我需要一个不使用无线电组的解决方案。只需一个单选按钮并点击即可切换其状态。
MainActivity.java
public void radioCheck(View v) {
System.out.println("radioCheck");
RadioButton rb = (RadioButton) findViewById(R.id.radioButton1);
//rb.toggle();
if (rb.isChecked() == true) {
rb.setChecked(false);
}
else {
rb.setChecked(true);
}
}
activity_main.xml中
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button1"
android:layout_centerHorizontal="true"
android:onClick="radioCheck"
android:text="Set me" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/radioButton1"
android:layout_centerHorizontal="true"
android:layout_marginBottom="39dp"
android:onClick="radioCheck"
android:text="On/ Off" />
令人惊讶的是,当使用按钮取消选中单选按钮时,setChecked会起作用,但在单选按钮上设置时同样不起作用。
答案 0 :(得分:2)
您可能导致无限循环和堆栈溢出。 setChecked
都是不必要的,您不需要自己切换。 onClick
用于对新选择做出反应,而不是自己检查/取消选中。
来自http://developer.android.com/guide/topics/ui/controls/radiobutton.html:
<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_pirates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pirates"
android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/radio_ninjas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ninjas"
android:onClick="onRadioButtonClicked"/>
</RadioGroup>
public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch(view.getId()) {
case R.id.radio_pirates:
if (checked)
// Pirates are the best
break;
case R.id.radio_ninjas:
if (checked)
// Ninjas rule
break;
}
}
答案 1 :(得分:0)
请尝试这种方式,希望这有助于您解决问题。
如果条件工作为true或false,那么当你得到isChecked()时已经返回true或false所以不需要检查(== true)你在代码中做错的事情。
<强> activity_main.xml中强>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set me" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="radioCheck"
android:layout_marginTop="10dp"
android:text="On/ Off" />
</LinearLayout>
<强> MainActivity.java 强>
public class MainActivity extends Activity {
private RadioButton radioButton1;
private Button button2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
button2 = (RadioButton) findViewById(R.id.button2);
}
public void radioCheck(View v) {
if (radioButton1.isChecked()) {
radioButton1.setChecked(false);
}
else {
radioButton1.setChecked(true);
}
}
}