我在XML中创建了一个RadioGroup
布局。所以我动态创建它:
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);
它......有效。为什么?在这两种情况下,segmentRadioGroup
都是RadioGroup
。如果我通过之前创建的segmentRadioGroup
而不是null
,那么它也无效。
答案 0 :(得分:3)
RadioGroup segmentRadioGroup = new RadioGroup(parentActivity);
在上面一行中,您创建了一个“空”RadioGroup
。然后...
inflater.inflate(R.layout.segm_btn_stores, segmentRadioGroup);
...在上面一行中,您从布局文件中膨胀了另一个RadioGroup
,然后将其“添加”到第一个RadioGroup
。这里的逻辑似乎是RadioGroup
扩展(并且实际上是IS)LinearLayout
,RadioGroup
包含另一个RadioGroup
是合法的。
segmentRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { ...});
最后,在上面的一行中,您将侦听器设置在外部/父RadioGroup
上,而不是内部RadioGroup
上。因此,永远不会为内部onCheckedChanged(...)
调用RadioGroup
方法。
嗯,这是我能想到的唯一逻辑。
用你的第二种方法......
RadioGroup segmentRadioGroup = (RadioGroup) inflater.inflate(R.layout.segm_btn_stores, null);
您只是在没有外部父布局的情况下对一个RadioGroup
进行充气,因为您将'null'作为第二个参数传递。
答案 1 :(得分: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..