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));
}
感謝所有理解和價格......
您是否在尋找獲得單選按鈕從RadioGroup中檢查? –
發佈你的代碼你試過了什麼。 –
我正在尋找方法來捕獲RadioGroup中的現有偵聽器,將其與我們的庫代碼一起包裝,然後再次放回。 – Arderun