如何取消选中或重置单选按钮?

Posted

技术标签:

【中文标题】如何取消选中或重置单选按钮?【英文标题】:How can I uncheck or reset the radio button? 【发布时间】:2013-04-03 10:36:01 【问题描述】:

我正在开发一个基于测验的应用程序。当用户打开此应用程序时,将有 1 个问题和 4 个选项(单选按钮)单选按钮将被取消选中,但当用户回答 1 个任务并且当他进行下一个任务单选按钮时会出现问题。我想取消选中/重置每个问题的单选按钮。我该怎么做?

  answ1=new ArrayList<String>(new ArrayList<String>(answ1));
        btn_practice1.setText(answ1.get(0));
        btn_practice2.setText(answ1.get(1));
        btn_practice3.setText(answ1.get(2));
        btn_practice4.setText(answ1.get(3));
        btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener()
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId)              
                RadioButton radioButton = (RadioButton)group. findViewById(checkedId); //line 262
                String temp = radioButton.getText().toString();
                switch(btn_practicerg.getCheckedRadioButtonId())
                case R.id.RB1:
                    if (btn_practice1.isChecked())
                        btn_practice2.setChecked(false);
                        btn_practice3.setChecked(false);
                        btn_practice4.setChecked(false);
                    
                   break;
                case R.id.RB2:
                    if (btn_practice2.isChecked())
                        btn_practice1.setChecked(false);
                        btn_practice3.setChecked(false);
                        btn_practice4.setChecked(false);
                                        
                    break;
                case R.id.RB3:
                    if (btn_practice3.isChecked())
                        btn_practice1.setChecked(false);
                        btn_practice2.setChecked(false);
                        btn_practice4.setChecked(false);
                    
                    break;
                case R.id.RB4:
                    if (btn_practice4.isChecked())
                        btn_practice1.setChecked(false);
                        btn_practice2.setChecked(false);
                        btn_practice3.setChecked(false);
                                       
                    break;
                default:
                    btn_practice1.setChecked(false);
                    btn_practice2.setChecked(false);
                    btn_practice3.setChecked(false);
                    btn_practice4.setChecked(false);
                  
        ImageView nextBtn = (ImageView) findViewById(R.id.nxt_btn);
    nextBtn.setOnClickListener(new Button.OnClickListener()
    public void onClick(View v)
         btn_practicerg.clearCheck();  //line 355
              
             );

Logcat

     E/androidRuntime(729):at    
      com.example.TEENEINSTIEN.Question$LoadQuestions$2.onCheckedChanged(Question.java:262)
      E/AndroidRuntime(729):at android.widget.RadioGroup.setCheckedId(RadioGroup.java:172)
      E/AndroidRuntime(729):at android.widget.RadioGroup.check(RadioGroup.java:166)
      E/AndroidRuntime(729):at android.widget.RadioGroup.clearCheck(RadioGroup.java:205)
      E/AndroidRuntime(729):at   
      com.example.TEENEINSTIEN.Question$LoadQuestions$3.onClick(Question.java:355)
      E/AndroidRuntime(729):at android.view.View.performClick(View.java:2485)
      E/AndroidRuntime(729):at android.view.View$PerformClick.run(View.java:9080)

                 

我尝试这样,但我无法取消选中..

【问题讨论】:

我认为你真的需要使用 RadioGroup 如果是这样检查链接developer.android.com/reference/android/widget/RadioGroup.html***.com/questions/6780981/… 首先,您应该考虑使用 RadioGroup 以避免手动“取消选中”它们。 RadioGroup 只有我用过,btn_practicerg 它是我代码中唯一的广播组... 【参考方案1】:

将所有按钮放在RadioGroup 中,然后在需要清除它们时使用RadioGroup.clearCheck();

【讨论】:

这应该是公认的答案,因为它减少了样板代码并提高了可读性。 这会在清除单选组的选中单选按钮时出现空指针异常。 注意:clearCheck() 调用 onCheckedChanged 两次。看看这个***.com/questions/4519103/…【参考方案2】:

我认为问题在于 btn_practicerg 对象,即如果您每次显示新问题时都创建新的 RadioGroup 对象,那么您必须在新的 btn_practicerg 对象,而不是我认为您目前正在做的旧对象。

更好:

    btn_practice1.setText(answ1.get(0));
    btn_practice2.setText(answ1.get(1));
    btn_practice3.setText(answ1.get(2));
    btn_practice4.setText(answ1.get(3));
    btn_practice1.setChecked(false);
    btn_practice2.setChecked(false);
    btn_practice3.setChecked(false);
    btn_practice4.setChecked(false);

取消选中开头的所有按钮。 我希望这能解决您的问题。

【讨论】:

它未选中,但有一个问题,在第一个问题中我选择选项 1 表示相同的选项 1,如果在第二个任务中选择它不标记或不选择其他选项我选择它的选择...【参考方案3】:

如果单选按钮属于一个单选组,您永远不能以编程方式单独取消选中该按钮,因此您必须先执行一个方法来取消所有选项。

    public void unchecked()
     
     RadioGroup x=findViewById(R.id.NameOfRadiogroup);
     x.clearCheck();
       

然后你必须调用该方法。

【讨论】:

【参考方案4】:

试试这个,这个解决方案解决了同样的问题:

    将 onclick 方法设置为所有 4 个单选按钮,例如 radio1Clickedradio2Clicked 等等

    在相应的 onclick 方法中添加以下代码:

    public void radio1Clicked(View view)
    
        // Note that I have unchecked  radiobuttons except the one
        // which is clicked/checked by user
        radio2Button.setChecked(false);
        radio3Button.setChecked(false);
        radio4Button.setChecked(false);
    
    

    对于剩余的单选按钮也同样如此。 希望这能解决您的问题。

请随时询问有关解决方案的任何问题。

【讨论】:

【参考方案5】:

我只有一个单选按钮,我真的不想制作单选按钮组。所以基本上我添加了一个单选按钮然后将文本留空,在它旁边添加了checkedTextView(重叠)然后将checkedTextView的onClick函数链接到一个切换函数->

public void toggle(View view)
 
    if(checkedTextView.isChecked())
     
        checkedTextView.setChecked(false); 
        actualRadioBtn.setChecked(false);
    
    else
    
        checkedTextView.setChecked(true);
        actualRadioBtn.setChecked(true);
    

然后在您检查该单选按钮是否被选中的函数中,您可以简单地使用

if(actualRadioBtn.isChecked())....

【讨论】:

【参考方案6】:

将所有人放在一个组中,然后使用:

buttonGroup1.clearSelection();

【讨论】:

【参考方案7】:

如果您有一个单选按钮,并且您希望在用户点击后取消选中它,请使用一个额外的布尔变量来跟踪单选按钮的选中状态。

        boolean check  = false;   // initial state of your radio button
        myRadioButton.setOnClickListener(view -> 
            if (check) 
                myRadioButton.setChecked(false);
                check = false;
                //write code for when button is unchecked
             else 
                check = true;
                myRadioButton.setChecked(true);
                //write code for when button is checked
            
        );

【讨论】:

【参考方案8】:

下面是单选按钮的代码

radioButton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                if (!radioButton.isSelected()) 
                    radioButton.setChecked(true);
                    radioButton.setSelected(true);
                 else 
                    radioButton.setChecked(false);
                    radioButton.setSelected(false);
                
            
        );

【讨论】:

以上是关于如何取消选中或重置单选按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何取消选中或清除单选按钮组?

取消选中带有 Material UI 的单选按钮

如果已经使用 Jquery 选中,需要帮助取消选中单选按钮

双击后如何取消选中单选按钮?

自定义单选按钮:如何取消选中? (复选框黑客)[重复]

第二次单击时取消选中单选按钮