使用带有radioGroup的@OnCheckedChanged(ButterKnife)会在android中出错

时间:2017-05-09 12:25:34

标签: android butterknife android-radiogroup oncheckedchanged

我最近在我的android项目中集成了butterknife,现在我正在尝试将@OnCheckedChanged注释用于radiogroup。但是没有给出回调的错误。那么调用和获取checkedId的正确方法是什么,或者这个只用于radiobutton而不用于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;
    }
}

给我错误

  

BloError:(89,10)错误:无法匹配@OnCheckedChanged方法参数。

参数#1:android.widget.RadioGroup 没有匹配任何监听器参数

参数#2:int 没有匹配任何监听器参数

方法最多可包含2个参数:

android.widget.CompoundButton 布尔

这些可以按任何顺序列出,但会从上到下搜索.ckquote

2 个答案:

答案 0 :(得分:46)

根据规范,这个注释需要与2个参数一起使用,CompoundButtonboolean,所以如果你真的想要使用这个监听器,你必须像这样改变它: / p>

@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 :(得分:12)

这对我有用

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