2017-05-09 11 views
6

Niedawno zintegrowany butterknife w moim projekcie Android, a teraz próbuję użyć adnotacji @OnCheckedChanged dla radiogroup. ale otrzymuję błąd, że nie otrzymuję oddzwaniania. Więc jaka jest właściwa metoda wywoływania i pobierania checkId lub ta jest tylko dla radiobutton, a nie dla radiogroup.Używanie @OnCheckedChanged (ButterKnife) z radioGroup daje błąd w Androidzie

@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; 
    } 
} 

Daje mi błąd

BloError:(89, 10) error: Unable to match @OnCheckedChanged method arguments.

Parametr # 1: android.widget.RadioGroup nie pasuje Parametry każdy słuchacz

Parametr # 2: int nie pasuje Parametry każdy słuchacz

Metody mogą mieć maksymalnie 2 parametry:

android.widget.CompoundButton logiczna

Mogą być wymienione w dowolnej kolejności, lecz będą przeszukiwane od góry do bottom.ckquote

Odpowiedz

25

Według specyfikacji, to adnotacji musi być używany z 2 parametrami, A CompoundButton i boolean, więc jeśli naprawdę chcesz używać tego słuchacza, trzeba zmienić to tak:

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

myślę, że w twoim przypadku ten słuchacz nie działa, więc można użyć innego realizację takiego:

@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; 
    } 
} 
+1

Próbuje użyć pierwszego podejścia: java.lang.ClassCastException: android.widget.RadioGroup nie mogą być oddane do android.widget.CompoundButton –

+0

CompoundButton jest pojedynczym przycisk, a nie grupę taką jak RadioGroup. –

7

ten pracował dla mnie

@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; 
      } 
     } 
    } 
+1

@ vuhung3990 może być konieczne usunięcie implementacji onClick, aby wyzwolić tylko raz –

+0

hi @Seph Remotigue, to jest mój błąd, jeśli radiogroup ma 2 radiobutton, to wyzwoli 1 dla przycisku powiadomienia 1 wyboru, 1 dla przycisku powiadomienia 2 odznaczenie ale masz warunkowe "sprawdzone" spowoduje wyzwolenie tylko raz, masz rację – vuhung3990