2012-06-19 38 views
1

我用XML創建了一個RadioGroup佈局。所以我動態地創建它:爲充氣RadioGroup創建onChangeListener

RadioGroup segmentRadioGroup = new RadioGroup(parentActivity); 
inflater.inflate(R.layout.segm_btn_stores, segmentRadioGroup);   
segmentRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup radioGroup, int i) { 
      showMap(); 
     } 
    }); 

哦,它不起作用! showMap不是射擊!

但是......等等。如果我們這樣做呢?

RadioGroup segmentRadioGroup = (RadioGroup) inflater.inflate(R.layout.segm_btn_stores, null); 

它...的作品。爲什麼?在兩種情況下,segmentRadioGroupRadioGroup。如果我通過segmentRadioGroup之前創建而不是null它不會工作。

回答

3
RadioGroup segmentRadioGroup = new RadioGroup(parentActivity); 

在上面的行中,您將創建一個'空'RadioGroup。然後......

inflater.inflate(R.layout.segm_btn_stores, segmentRadioGroup); 

...在上面的線,你吹另一個RadioGroup從佈局文件,它然後「添加」到第一RadioGroup。這裏的邏輯似乎是因爲RadioGroup擴展(並且實際上是)LinearLayout,因此RadioGroup包含另一個RadioGroup是合法的。

segmentRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { ...}); 

最後,在上面的行,則在內側RadioGroup設置在外/父RadioGroup而不是聽衆。因此,onCheckedChanged(...)方法永遠不會被呼叫內部RadioGroup

那麼這是我能想出的唯一邏輯。

隨着你的第二個辦法......

RadioGroup segmentRadioGroup = (RadioGroup) inflater.inflate(R.layout.segm_btn_stores, null); 

你只是一個充氣不RadioGroup外父佈局,因爲你通過「空」作爲第二個參數。

0

這應該工作:

RadioGroup segmentRadioGroup = inflater.inflate(R.layout.segm_btn_stores, null);   
segmentRadioGroup.setOnCheckedChangeListener(
     new RadioGroup.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(RadioGroup radioGroup, int i) { 
       showMap(); 
      } 
     }); 
// add to the parent layout here..