web-dev-qa-db-ja.com

radioGroupで@OnCheckedChanged(ButterKnife)を使用すると、android

私は最近、バターナイフを私のAndroidプロジェクトに統合しました、そして今はradiogroupに@OnCheckedChangedアノテーションを使用しようとしていますが、コールバックを与えないというエラーが発生しています。または、これはラジオボタン専用であり、ラジオグループ用ではありません。

@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

13
Niki

仕様によれば、この注釈はCompoundButtonbooleanの2つのパラメーターで使用する必要があるため、このリスナーを本当に使用する場合は、次のように変更する必要があります。

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

これは私のために働いた

@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