web-dev-qa-db-fra.com

comment puis-je décocher ou réinitialiser le bouton radio?

Je suis nouveau sur le domaine Android ..

Je développe une application basée sur quiz. Il y aura 1 question et 4 options (boutons radio) lorsque l'utilisateur ouvrira ce bouton radio de l'application sera décoché, mais le problème surviendra lorsque l'utilisateur aura répondu à 1 quête et qu'il passera à la case suivante. réinitialiser les boutons radio pour chaque question. Comment puis-je le faire?

Merci d'avance...

  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)

J'essaie comme ça, mais je ne peux pas décocher ..

19
Make it Simple

Je pense que le problème est avec btn_practicerg object, c’est-à-dire que si vous créez un nouvel objet RadioGroup chaque fois que vous affichez une nouvelle question, vous devez exécuter RadioGroup.clearCheck () on new btn_practicerg object au lieu de ancien que je pense que vous faites actuellement.

Encore mieux:

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

pour décocher tous les boutons au début ... J'espère que cela résoudra votre problème.

17
Arjun Vekariya

Mettez tous vos boutons dans une RadioGroup puis quand vous avez besoin de les effacer, utilisez RadioGroup.clearCheck();

42

Essayez celui-ci, le même problème a été résolu avec cette solution:

  1. définir la méthode onclick sur les 4 boutons radio suivants: radio1Clicked, radio2Clicked et ainsi de suite
  2. dans la méthode onclick respective, ajoutez le code ci-dessous:

    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. simillarly faire pour les radiobuttons restants . J'espère que cela résoudra votre problème.

S'il vous plaît n'hésitez pas à poser des questions sur la solution.

3
user2823274

Je n'avais qu'un bouton radio et je ne voulais vraiment pas créer un groupe de boutons radio. Donc, en gros, j’ai ajouté un bouton radio, puis laissé le texte vide, ajouté le tickTextView à côté (chevauchement), puis lié la fonction onClick de cet objet à une fonction de basculement -> 

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

Ensuite, dans votre fonction où vous vérifiez si ce bouton radio est sélectionné, vous pouvez simplement utiliser 

if(actualRadioBtn.isChecked())....
1
Prateek

si le radiobutton appartient à un radiogroupe, vous ne pouvez JAMAIS décocher ce bouton par programmation, vous devez donc utiliser une méthode pour décocher tout d'abord.

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

et ensuite vous devez appeler la méthode.

0
Raul Cervera

Mettez tous dans un groupe, puis utilisez:

buttonGroup1.clearSelection();
0
Haqq Nuru