web-dev-qa-db-fra.com

android onCheckedChanged pour le radiogroupe

J'écris une Activity dans Android où j'ai deux boutons radio sous un groupe RadioGroup. L'un d'eux est coché par défaut. Mais je ne peux pas déclencher l'événement avec la méthode onCreate pour pouvoir y faire quelque chose. La onCheckedChanged fonctionne correctement lorsque vous cliquez 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
            }
        }
    });
22
user2534310

Pour activer une case à cocher pour la radio par défaut lors de l’initialisation. Définissez tout comme décochée avec la méthode clearCheck, puis définissez le gestionnaire, puis définissez la valeur par défaut et votre gestionnaire se déclenchera.

itemtypeGroup.clearCheck();

puis 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
                }

            }

        });

Puis cochez le bouton radio par défaut et votre auditeur se déclenchera.

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

Bonne chance

40
danny117
 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
          }

        }
    });

cela fonctionne pour moi. l'espoir est utile

7
Maysam R

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.

4
The Hawk

Le problème vient du fait que vous définissez OnCheckedChangeListener on RadioGroup après l'appel providerRadio.performClick(); de la méthode .

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

Et au lieu d’utiliser RadioButton.performClick(), vous devez utiliser la méthode RadioGroup.check() pour modifier la RadioButton cochée en cours.

Vous pouvez donc utiliser ce code pour changer 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 la méthode RadioGroup.check() après avoir ajouté OnCheckedChangeListener comme ci-dessus dans l'extrait de code.

2
Akhilesh Kumar

J'imagine que vous effectuez un clic avant de définir le programme d'écoute du groupe, c'est pourquoi l'événement n'est pas déclenché.

0
Ruman