2017-05-09 48 views
6

我最近整合butterknife在我的Android项目,现在我想使用@OnCheckedChanged标注为RadioGroup中。但得到的不给回调错误。那么,什么是打电话,并得到checkedId正确的方法或这一个,而不是为单选按钮的RadioGroup中。使用@OnCheckedChanged(ButterKnife)与radioGroup中给出了错误的Android

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

给我的错误

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

参数#1:android.widget.RadioGroup 没有匹配的侦听器参数

参数#2:诚信 没有匹配的侦听器参数

方法可能有多达2参数(一个或多个):

android.widget.CompoundButton 布尔

这些可以以任意顺序列出,但将被搜索的从顶部到bottom.ckquote

回答

25

根据本说明书中,这个注释需要与2个参数被使用,一个CompoundButtonboolean,所以如果你真的想用这个监听器,你必须改变这样的:

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

我想在你的情况下,该监听器不工作,所以你可以像使用另一种实现方式:

@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

尝试使用第一种方法:java.lang.ClassCastException:android.widget.RadioGroup不能转换到android.widget.CompoundButton –

+0

一个CompoundButton是单按钮,而不是一组像RadioGroup中。 –

7

这个工作对我来说

@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你可能不得不删除onClick实现,所以它只会触发一次 –

+0

hi @Seph Remotigue,这是我的错误,如果radiogroup有2个单选按钮,它会触发1通知按钮1检查,1通知按钮2取消选中 但你有一个条件'checked'只会触发1次,你是对的 – vuhung3990