Android未选中的单选按钮却已经被选中

5
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rg"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.radiogroup.MainActivity" >

    <RadioButton
        android:id="@+id/rb_true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical" />

    <RadioButton
        android:id="@+id/rb_false"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical" />

</RadioGroup>

我有一个单选框组,其中包含2个单选按钮

现在,如果选择单选按钮1,如果我再次点击同一单选按钮(单选按钮1),它应该被取消选择。

它应该像切换一样工作。


单选按钮再次点击时不会取消选择。只有当您选择同一“单选组”的另一个单选按钮时,它才会取消选择。 - Anshul Tyagi
1
使用复选框代替单选按钮。单选按钮再次点击时不会取消选择。 - David
@AnirudhSharma -- 如果我没有单选组,你如何处理它,请解释一下。 - Query
1
最好的部分是根本不使用单选按钮。复选框是专门为这些情况设计的。所以使用它们。它们会很好地完成任务。 - Anirudh Sharma
我知道,但我的要求是只使用无线电。顺便感谢您的建议。 - Query
显示剩余3条评论
3个回答

1

是的,单选按钮可以像复选框一样工作

首先声明标志为“false”

private boolean flagmale = false;
private boolean flagfemale = false;


rdbtnMale.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (rdbtnMale.isChecked()) {
                if (!flagmale) {
                    rdbtnMale.setChecked(true);
                    rdbtnFemale.setChecked(false);
                    flagmale = true;
                    flagfemale = false;
                } else {
                    flagmale = false;
                    rdbtnMale.setChecked(false);
                    rdbtnFemale.setChecked(false);
                }
            }
        }
    });


    rdbtnFemale.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (rdbtnFemale.isChecked()) {
                if (!flagfemale) {
                    rdbtnFemale.setChecked(true);
                    rdbtnMale.setChecked(false);
                    flagfemale = true;
                    flagmale = false;
                } else {
                    flagfemale = false;
                    rdbtnFemale.setChecked(false);
                    rdbtnMale.setChecked(false);
                }
            }
        }
    });

这也可以通过一个标志实现。


2
如果您正在使用一个标志,则只需在rdbtnFemale.setOnClickListener中反转布尔值。 - MashukKhan
是的..不要在单选组中使用单选按钮,而是使用两个独立的单选按钮。 - MashukKhan
嘿,@Query 如果这个答案解决了你的问题,请将其标记为已验证 (✔)。 - MashukKhan

0
使用以下方法以编程方式在警报框中显示单选按钮。
 Private void SelectLanguageMethod(){


    // Strings to Show In Dialog with Radio Buttons
            final CharSequence[] items = {"English"," Spanish "};

            // Creating and Building the Dialog
            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Select The Language");
            builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {

            //Your code here

         }
            });
            levelDialog = builder.create();
            levelDialog.show();
        }

如果有人给负评,请解释一下原因...@Kat-hat...这与问题无关。OP只想取消选中的RadioButton... - Opiatefuchs
1
这只是以动态方式执行的另一种选择。我只是给出选择 @Opiatefuchs - Santosh Kathait
是的,当然可以,但这与问题无关。因此,您应该解释得更详细,以便OP能够理解。此外,这并没有为他的问题提供解决方案。 - Opiatefuchs
我必须同意其他投票者的观点,这与问题无关,并没有提供切换单选按钮的解决方案。原帖并没有提到想要使用对话框。我来到这里是为了寻找同样问题的答案,而给我的UI规范是明确的。 - Makotosan

0
这应该能达到目的。
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    @Override
    public void onCheckedChanged(RadioGroup arg0, int id)
    {
    RadioButton checkedRadioButton = (RadioButton)radioGroup.findViewById(id);

    boolean isChecked = checkedRadioButton.isChecked();

    if (isChecked)
    {
    Toast.makeText(getApplicationContext(), 
               checkedRadioButton.getText(),Toast.LENGTH_LONG).show();
    radioButton = (String) checkedRadioButton.getText();
    checkedRadioButton.setChecked(false);
    }
    else
        checkedRadioButton.setChecked(true);
    }});

另外,不要忘记初始化RadioGroup

1
当您选择同一单选按钮时,checkedChange不会被调用,只有在选择组中的其他单选按钮时才会被调用。 - Query
@Query,我在我的端上尝试了这段代码,然后回答了它。它完美地运行了。 - Deepika Rajani
3
如果在您的端口工作正常,那就很好,但 Android 表示,如果您再次单击同一单选按钮,则不会调用“CheckedChange”函数。 - Query
@Query 我遇到了你在上一个评论中提到的同样的问题。你找到了解决方案吗? - Arbaz.in

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