【问题标题】:Using @OnCheckedChanged (ButterKnife) with radioGroup gives error in android将@OnCheckedChanged(ButterKnife)与radioGroup一起使用会在android中出现错误
【发布时间】:2017-10-07 18:20:39
【问题描述】:

我最近在我的 android 项目中集成了黄油刀,现在我正在尝试为 radiogroup 使用 @OnCheckedChanged 注释。但出现不给回调的错误。那么调用和获取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

【问题讨论】:

  • 两种性别,我的最爱

标签: android butterknife android-radiogroup oncheckedchanged


【解决方案1】:

根据规范,这个注解需要使用两个参数,一个CompoundButton和一个boolean,所以如果你真的要使用这个监听器,你必须这样改:

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

【讨论】:

  • 尝试使用第一种方法:java.lang.ClassCastException: android.widget.RadioGroup cannot be cast to android.widget.CompoundButton
  • 复合按钮是单个按钮,而不是像 RadioGroup 这样的组。
  • RadioGroup 扩展了 LinearLayout,如果您使用 @OnCheckedChange 黄油刀尝试将“RadioGroup”转换为“CompoundButton”。这仅适用于“RadioButton”,因此您需要使用单选按钮组内的单选按钮 ID 列表,而不是单选按钮组本身。
【解决方案2】:

这对我有用

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

【讨论】:

  • @vuhung3990 您可能必须删除 onClick 实现,以便它只会触发一次
  • 嗨@Seph Remotigue,这是我的错误,如果radiogroup有2个单选按钮,它将触发1个通知按钮1检查,1个通知按钮2取消选中但你有一个条件checked只会触发1次,你是对的
猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 2017-07-08
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多