1

RadioGroup在 XML 中创建了一个布局。所以我动态创建它:

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它也不会工作。

4

2 回答 2

3
RadioGroup segmentRadioGroup = new RadioGroup(parentActivity);

在上面的行中,您创建了一个 'empty' RadioGroup。然后...

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

...在上面的行中,您RadioGroup从布局文件中膨胀另一个,然后将其“添加”到第一个RadioGroup. 这里的逻辑似乎是,作为RadioGroupextends (实际上是 IS)LinearLayout, aRadioGroup包含 another是合法的RadioGroup

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

最后,在上面的行中,您将侦听器设置在 external / parentRadioGroup而不是 inner 上RadioGroup。因此,onCheckedChanged(...)永远不会为内部调用该方法RadioGroup

嗯,这是我能想出的唯一逻辑。

用你的第二种方法......

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

您只是在膨胀一个RadioGroup没有外部父布局的布局,因为您将“null”作为第二个参数传递。

于 2012-06-19T18:01:06.890 回答
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..
于 2012-06-19T18:07:43.337 回答