2014-09-19 87 views
1

我正在尝试使用setChecked()进行单选按钮切换。单选按钮setchecked无法在Android中设置为true

setChecked(false)正常,但setChecked(true)不起作用。

也试过切换(),即使这不会取消选中单选按钮。

我需要一个解决方案,而不使用无线电组。只需一个单选按钮并点击即可切换其状态。

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

尝试更换此代码:if(rb.isChecked()){ – 2014-09-19 07:15:03

回答

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; 
    } 
} 
0

试试这种方式,希望这会帮助你解决你的问题。

如果条件工作正确或错误的情况下,所以当你得到isChecked()已经返回true或false,因此没有必要检查(==真)这是你在代码中做错了事情。

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); 
     } 
    } 

} 
+1

但radioCheck方法被调用上一个按钮,而不是单选 – 2014-09-19 07:18:09

+0

或只是点击:rb.setChecked (!((单选)v).isChecked()); – personne3000 2014-09-19 07:18:19

+0

现在检查我更新的答案。 – 2014-09-19 07:20:55

相关问题