2017-08-21 33 views
-3

RadioGroup爲OnCheckedChangeListener提供方法「set()」,但不提供「get()」。但是,我的模塊必須以某種方式獲取RadioGroup的OnCheckedChangeListener,並將其與我的偵聽器一起包裝,從而爲客戶提供跟蹤行爲。我怎樣才能得到這個OnCheckedChangeListener偵聽器而不要求我的庫的用戶明確地提供它作爲參數?如何獲取RadioGroup中的OnCheckedChangeListener

樣的問題:

我們可以實現方法:

void wrapMyRadioGroup(RadioGroup group,OnCheckedChangeListener listener){ 
    group.setOnCheckedChangeListener(new SomeCompositeListener(listener)); 
} 

但不能一些這樣的:

void wrapMyRadioGroup(RadioGroup group){ 
    group.setOnCheckedChangeListener(new SomeCompositeListener(group.getOnCheckedChangeListener())); 
} 

而且,正如你可以客串,我們需要的最後一個。

P.S.

我找到了解決方案與反思。

private void trackRadioGroup(RadioGroup radioGroup){ 
    RadioGroup.OnCheckedChangeListener listener = null; 
    try { 
     Field field = radioGroup.getClass().getDeclaredField("mOnCheckedChangeListener"); 
     field.setAccessible(true); 
     Object value = field.get(radioGroup); 
     if(value !=null){ 
      listener = (RadioGroup.OnCheckedChangeListener)value; 
     } 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 
    radioGroup.setOnCheckedChangeListener(new SomeCompositeListener(listener)); 
} 

感謝所有理解和價格......

+0

您是否在尋找獲得單選按鈕從RadioGroup中檢查? –

+0

發佈你的代碼你試過了什麼。 –

+0

我正在尋找方法來捕獲RadioGroup中的現有偵聽器,將其與我們的庫代碼一起包裝,然後再次放回。 – Arderun

回答

1

試試這個

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.cancle_booking_radio_group); 

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 

      View radioButton = radioGroup.findViewById(checkedId); 
      int index = radioGroup.indexOfChild(radioButton); 
      switch (index) { 
       case 0: 
        // perform your action here 
        break; 
       case 1: 
        // perform your action here 
        break; 
       case 2: 
        // perform your action here 
        break; 
       case 3: 
        // perform your action here 
        break; 
       case 4: 
        // perform your action here 
        break; 
      } 
     } 
    }); 
+0

沒有。我需要之前的捕獲偵聽器,並且您的代碼完全取消了此偵聽器 – Arderun

相關問題