33

我正在开发一个基于测验的应用程序。当用户打开此应用程序时,将有 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
              }
             });

日志猫

     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)

                 

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

4

8 回答 8

71

RadioGroup当您需要清除所有按钮时,将所有按钮放在一个then 中RadioGroup.clearCheck();

于 2013-04-11T09:35:09.020 回答
23

我认为问题在于btn_practicerg对象,即如果您每次显示新问题时都创建新的 RadioGroup 对象,那么您必须在新的btn_practicerg对象上执行RadioGroup.clearCheck()而不是我认为您当前正在执行的旧对象。

更好的是:

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

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

于 2013-04-11T10:08:13.737 回答
5

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

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

然后你必须调用该方法。

于 2018-11-04T15:18:10.983 回答
4

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

  1. 将 onclick 方法设置为所有 4 个单选按钮radio1Clickedradio2Clicked等等
  2. 在相应的 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);
    }
    
  3. 对剩余的单选按钮做同样的事情。希望这能解决您的问题。

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

于 2013-10-07T09:26:30.477 回答
3

我只有一个单选按钮,我真的不想制作单选按钮组。所以基本上我添加了一个单选按钮然后将文本留空,在它旁边添加了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())....
于 2018-03-03T04:15:27.370 回答
2

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

buttonGroup1.clearSelection();
于 2018-06-11T16:21:36.507 回答
0

下面是单个单选按钮的代码

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);
                }
            }
        });
于 2021-12-14T06:20:59.980 回答
0

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

        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
            }
        });
于 2021-11-18T12:57:19.590 回答