web-dev-qa-db-fra.com

L'utilisation de @OnCheckedChanged (ButterKnife) avec radioGroup donne une erreur dans android

j'ai récemment intégré butterknife dans mon Android, et maintenant j'essaie d'utiliser l'annotation @OnCheckedChanged pour le radiogroupe. mais j'obtiens une erreur de non-rappel. ou celui-ci est pour radiobutton uniquement et non pour radiogroup.

@OnCheckedChanged(R.id.gendergroupid)
void onGenderSelected(RadioGroup group, int checkedId){
    switch(checkedId){
        case R.id.maleid:
            maleid.setEnabled(true);
            maleid.setChecked(true);
            break;
        case R.id.femaleid:
            femaleid.setEnabled(true);
            femaleid.setChecked(true);
            break;
        case R.id.bothid:
            bothid.setEnabled(true);
            bothid.setChecked(true);
            break;
    }
}

Me donne une erreur

BloError: (89, 10) erreur: impossible de faire correspondre les arguments de la méthode @OnCheckedChanged.

Paramètre n ° 1: Android.widget.RadioGroup ne correspond à aucun paramètre d'écoute

Paramètre n ° 2: int ne correspond à aucun paramètre d'écoute

Les méthodes peuvent avoir jusqu'à 2 paramètre (s):

Android.widget.CompoundButton booléen

Ceux-ci peuvent être répertoriés dans n'importe quel ordre, mais seront recherchés de haut en bas.

13
Niki

Selon la spécification, cette annotation doit être utilisée avec 2 paramètres, un CompoundButton et un boolean, donc si vous voulez vraiment utiliser cet écouteur, vous devez le changer comme ceci:

@OnCheckedChanged(R.id.gendergroupid)
void onGenderSelected(CompoundButton button, boolean checked) {
   //do your stuff.
}

Je pense que dans votre cas, cet écouteur ne fonctionne pas, vous pouvez donc utiliser une autre implémentation comme:

@OnClick({R.id.radio_1, R.id.radio_2}) 
public void onRadioButtonClicked(RadioButton radioButton) {
    // Is the button now checked?
    boolean checked = radioButton.isChecked();

    // Check which radio button was clicked
    switch (radioButton.getId()) {
      case R.id.radio_1:
        if (checked) {
          // 1 clicked
        }
        break;
      case R.id.radio_2:
        if (checked) {
          // 2 clicked
        }
        break;
    }
}

cela a fonctionné pour moi

@OnCheckedChanged({R.id.radio_button1, R.id.radio_button2})
public void onRadioButtonCheckChanged(CompoundButton button, boolean checked) {
        if(checked) {
            switch (button.getId()) {
                case R.id.radio_button1:
                    // do stuff
                    break;
                case R.id.radio_button2:
                    // do stuff
                    break;
            }
        }
    }
14
Seph Remotigue