如何取消选中组中的单选按钮?

时间:2013-02-13 07:00:58

标签: android radio-group

我正在做一个测验应用程序我有一个带有4个单选按钮的收音机组,我有一个下一个按钮。

在显示第一个问题并且在检查时没有问题时,当用户给出下一个时,无线电组应该取消选中。如何实现这个?

当用户选择该选项时,应验证答案是否正确或不正确。我已将正确的答案存储在数组中。当用户切换选项时,它会在切换按钮中显示错误。如何实现这个?

   btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) { 
                RadioButton radioButton = (RadioButton)group. findViewById(checkedId);
                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;
                }
                crrtans=new ArrayList<String>(new ArrayList<String>(crrtans));
                if (temp.equals(crrtans.get(l))){
                TextView txtRadio = (TextView) findViewById(R.id.rdtxt); 
                txtRadio.setText("" + radioButton.getText() + " IS CORRECT");   
                txtRadio.setTextColor(Color.parseColor("#008000"));
               }else{
              TextView txtRadio = (TextView) findViewById(R.id.rdtxt); 
          txtRadio.setText("" + radioButton.getText() + "is INCORRECT");
          txtRadio.setTextColor(Color.parseColor("#FF0000")); 
              }
            }
     });
    Button nextBtn = (Button) findViewById(R.id.nxt_btn);
    nextBtn.setOnClickListener(new Button.OnClickListener(){
    public void onClick(View v){
         if (j == ques1.size() -1) {
                showAlert1();
            }
          else{ 
            ++j;
            ++num;
            TextView txtque = (TextView) findViewById(R.id.que_txt); 
            txtque.setText("Q" + num +ques1.get(j));
                        }      
         });

2 个答案:

答案 0 :(得分:1)

问题出在public void onCheckedChanged(RadioGroup group, int checkedId)内 您正在创建基于checkedId的已检查单选按钮的实例,一旦您调用clearCheck,该实例就可以为null。事实是,当您单击下一个按钮时,在您的无线电组上调用clearCheck后,onCheckedChanged事件将被触发并获得null checkedId。因此,当您执行此操作时,您将获得一个空单选按钮:RadioButton radioButton = (RadioButton)group. findViewById(checkedId);

编辑(更好的解释):

将此方法添加到您的班级:

private void doProcessingWithRadioButton(int checkedId)
    {
        RadioButton radioButton = (RadioButton)group. findViewById(checkedId);
        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;
        }
        crrtans=new ArrayList<String>(new ArrayList<String>(crrtans));
        if (temp.equals(crrtans.get(l))){
            TextView txtRadio = (TextView) findViewById(R.id.rdtxt); 
            txtRadio.setText("" + radioButton.getText() + " IS CORRECT");   
            txtRadio.setTextColor(Color.parseColor("#008000"));
       }else{
          TextView txtRadio = (TextView) findViewById(R.id.rdtxt); 
          txtRadio.setText("" + radioButton.getText() + "is INCORRECT");
          txtRadio.setTextColor(Color.parseColor("#FF0000")); 
       }
    }

现在改变你的代码:

btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) { 
            if(checkedId != -1)
            {
                doProcessingWithRadioButton(checkedId);
            }
        });

希望这有帮助。如果它解决了您的问题,请不要忘记将其标记为答案。

答案 1 :(得分:0)

要清除所有单选按钮,即没有要检查的组中的单选按钮,请使用

clearCheck() 

例如你的

radiogroupname.clearCheck();