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

时间:2013-04-11 09:30:08

标签: android radio-button clear

我是Android域名的新手..

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

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

6 个答案:

答案 0 :(得分:45)

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

答案 1 :(得分:17)

我认为问题是使用btn_practicerg 对象,即如果您每次显示新问题时创建新的RadioGroup对象,则必须执行 RadioGroup.clearCheck()新的 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);

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

答案 2 :(得分:3)

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

  1. 将onclick方法设置为所有4个radiobuttons说radio1Clickedradio2Clicked&amp;所以
  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. 同样适用于剩余的radiobuttons。 希望这能解决你的问题。

  4. 请随时询问有关解决方案的任何疑问。

答案 3 :(得分:2)

将所有内容放入一个组中,然后使用:

buttonGroup1.clearSelection();

答案 4 :(得分:1)

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

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

然后在您检查是否选中该单选按钮的功能中,您只需使用

即可
if(actualRadioBtn.isChecked())....

答案 5 :(得分:0)

如果“单选按钮”属于某个单选组,则您永远不能单独取消对该按钮的编程检查,因此必须首先采取一种方法来取消所有选择。

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

然后必须调用该方法。