Question android onCheckedChanged pour le radiogroupe


J'écris un Activity dans Android où j'ai deux boutons radio sous un RadioGroup. L'un d'eux est coché par défaut. Mais je ne peux pas déclencher l'événement dans onCreate méthode pour que je puisse faire quelque chose à cet égard. le onCheckedChanged fonctionne bien quand on clique dessus.

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
    RadioButton providerRadio = (RadioButton) findViewById(R.id.a);
    providerRadio.performClick();

    ItemtypeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged (RadioGroup group,int checkedId){

            Log.d("chk", "id" + checkedId);

            if (checkedId == R.id.a) {
                //some code
            } else if (checkedId == R.id.b) {
                //some code
            }
        }
    });

19
2017-08-30 15:09


origine


Réponses:


Pour activer une case à cocher radio par défaut lors de l'initialisation. Tout désélectionner avec la méthode clearCheck, puis définir le gestionnaire, puis définir la valeur par défaut et votre gestionnaire se déclenche.

itemtypeGroup.clearCheck();

puis même comme d'habitude ajoutez un auditeur ...

itemtypeGroup
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("chk", "id" + checkedId);

                if (checkedId == R.id.a) {
                    //some code
                } else if (checkedId == R.id.b) {
                    //some code
                }

            }

        });

Ensuite, cochez le bouton radio par défaut et votre auditeur se déclenche.

rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);

Bonne chance


36
2017-08-30 16:53



 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            if (checkedId == R.id.radioButton1) {
             //do work when radioButton1 is active
            } else  if (checkedId == R.id.radioButton2) {
             //do work when radioButton2 is active
          } else  if (checkedId == R.id.radioButton3) {
             //do work when radioButton3 is active
          }

        }
    });

Ce travail pour moi. l'espoir est utile


5
2018-01-23 21:30



Essayez ce code.

Déclarez ce code dans votre méthode onCreate.

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
    radioGroup.clearCheck();
    radioGroup.setOnCheckedChangeListener(new  RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            RadioButton rb = (RadioButton) group.findViewById(checkedId);
            if (null != rb && checkedId > -1) {

                // checkedId is the RadioButton selected
                switch (checkedId) {
                    case R.id.one:
                     // Do Something
                      break;

                    case R.id.two:
                    // Do Something
                      break;   

                    case R.id.three:
                    // Do Something   
                        break;
                }
            }
        }

    });

J'espère que cela t'aides.


3
2018-02-21 11:18



Le problème est que, vous définissez  OnCheckedChangeListener  sur  RadioGroup  après le  providerRadio.performClick();  appel de méthode.

C'est pourquoi quand providerRadio.performClick(); la méthode s'exécute jusqu'à ce que leur est pas OnCheckedChangeListener disponible pour appeler. Donc, pour que cela fonctionne, vous devez définir Listener avant l'appel à performClick() méthode.

Et au lieu d'utiliser RadioButton.performClick() Tu devrais utiliser RadioGroup.check() méthode pour changer le courant vérifié RadioButton.

Vous pouvez donc utiliser ce code pour modifier la sélection actuelle de RadioGroup

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
ItemtypeGroup
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                Log.d("chk", "id" + checkedId);

                if (checkedId == R.id.a) {
                    //some code
                } else if (checkedId == R.id.b) {
                    //some code
                }

            }

        });
ItemtypeGroup.check(R.id.a);

Remarque: - Assurez-vous d'appeler  RadioGroup.check()  méthode après l'ajout  OnCheckedChangeListener  comme ci-dessus dans l'extrait de code.


2
2017-10-07 08:34



Je suppose que vous effectuez un clic avant de définir l'écouteur sur le groupe, c'est pourquoi l'événement n'est pas déclenché.


0
2017-11-12 07:23