如何在没有单选按钮组的情况下取消单选按钮的选择?

5
我已经使用以下代码片段来设置一个单选按钮未被选择,如果另一个单选按钮被选中,但是当我运行应用程序并选择两个单选按钮时,代码不起作用,因为它们都保持选中状态。我正在使用相对布局,所以我不能使用任何其他带有单选组的解决方案,我只是在使用两个单独的单选按钮。有人能指出我可能哪里出错了吗?我看不出逻辑上的缺陷,有什么想法吗?无论如何,这就是我要实现的解决方案,但它在应用程序中不起作用:
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.radBtnMM:
                if (checked)
                    //set inch button to unchecked
                     radioInch.setChecked(false);
                break;
            case R.id.radBtnInch:
                if (checked)
                    //set MM button to unchecked
                    radioMM.setChecked(false);
                break;
        }
    }
3个回答

8

你的public void onRadioButtonClicked(View view)什么时候被调用?它是由监听器触发的吗?

这段代码可以正常工作:

layout.xml:

<RadioButton 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radBtnMM"
/>
<RadioButton 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radBtnInch"
/>

YourActivity.java:

public class MainActivity extends Activity implements OnCheckedChangeListener {
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    setContentView(R.layout.activity_main);
    rb1 = (RadioButton) findViewById(R.id.radBtnInch);
    rb1.setOnCheckedChangeListener(this);
    rb2 = (RadioButton) findViewById(R.id.radBtnMM);
    rb2.setOnCheckedChangeListener(this);
    return true;
  }
  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked) {
      if (buttonView.getId() == R.id.radBtnInch) {
        rb2.setChecked(false);
      }
      if (buttonView.getId() == R.id.radBtnMM) {
        rb1.setChecked(false);
      }
    }
  }

我尝试了这个修复方法,但是在设置单选按钮为“this”时出现以下错误:The method setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener) in the type CompoundButton is not applicable for the arguments (MainActivity) - Brian Var
抱歉,我忘记了您的Activity必须实现OnCheckedChangeListener接口。我已经在我的回复中添加了这一行代码:public class MainActivity extends Activity implements OnCheckedChangeListener { - Miłosz
问题在于我使用了一个监听器方法,但没有将监听器设置到单选按钮上,感谢解决方案。 - Brian Var

2

试试这个...

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.radioBtnMM:
        // set inch button to unchecked
        radioBtnInch.setChecked(!checked);
        break;
    case R.id.radioBtnInch:
        // set MM button to unchecked
        radioBtnMM.setChecked(!checked);
        break;
    }
}

0

试一下这个:

@Override
public void onClick(View v)
{
    switch (v.getId()) 
    {
        case R.id.radBtnMM:
                if (checked)
                 {
                    radioInch.setChecked(false);
                 }
                 else
                 {
                   radioInch.setChecked(true);   
                 }
                break;
            case R.id.radBtnInch:
               if (checked)
                 {
                     radioMM.setChecked(false);
                 }
                 else
                 {
                    radioMM.setChecked(true);
                 }
                 break;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接