2017-05-09 66 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