Android RadioGroup OnCheckedChangeListener

Android RadioGroup OnCheckedChangeListener,android,checkbox,listener,android-radiogroup,Android,Checkbox,Listener,Android Radiogroup,我有一个活动,它同时实现了复选框。OnCheckedChangeListener和RadioGroup。OnCheckedChangeListener两个组都是动态生成的,并且传递的活动与listener相同 但是,当我单击一个RadioGroup时,RadioGroup.OnCheckChangeListener被完全忽略,但这就是它变得奇怪的地方。它会触发复选框。OnCheckChangeListener!在传递活动之前,我尝试将其强制转换为RadioGroup侦听器,但RadioGroup

我有一个活动,它同时实现了复选框。OnCheckedChangeListener和
RadioGroup。OnCheckedChangeListener
两个组都是动态生成的,并且传递的
活动与
listener
相同

但是,当我单击一个RadioGroup时,
RadioGroup.OnCheckChangeListener
被完全忽略,但这就是它变得奇怪的地方。它会触发
复选框。OnCheckChangeListener
!在传递活动之前,我尝试将其强制转换为RadioGroup侦听器,但RadioGroup甚至无法接受它,只有复选框侦听器才能通过

@Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(subquestion.getQuestionType().equals("MULTIPLE_CHOICE_MULTI_ANSWER")) {
                String selected = buttonView.getText().toString();
                if (subquestion.getAnswer().getDataList() != null) {
                    Answer answer = subquestion.getAnswer();
                    ArrayList<String> checked = answer.getDataList();
                    if (checked.contains(selected)) {
                        checked.remove(selected);
                        Log.d("Checkbox" + buttonView.getId(), "unchecked");
                    } else {
                        checked.add(selected);
                        Log.d("Checkbox" + buttonView.getId(), "checked");
                    }
                } else {
                    ArrayList<String> checked = new ArrayList<String>();
                    checked.add(selected);
                    subquestion.getAnswer().setDataList(checked);
                    Log.d("Checkbox" + buttonView.getId(), "checked");
                }
            }
            if(subquestion.getQuestionType().equals("MULTIPLE_CHOICE_SINGLE_ANSWER")) {
                RadioGroup group = buttonView; //CAN'T BE DONE
                String selected = group.getFocusedChild().getId() + "";
                subquestion.getAnswer().setData(selected);
                Log.d("Radiobutton " + selected + group.getFocusedChild().getId(), "selected");
            }
        }

        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
           //This does NOTHING, can't even be passed to the RadioGroup as a listener
        }
@覆盖
检查更改后的公共无效(复合按钮视图,布尔值已检查){
if(subquestion.getQuestionType().equals(“多选多答”)){
所选字符串=buttonView.getText().toString();
if(子问题.getAnswer().getDataList()!=null){
答案=子问题。getAnswer();
选中ArrayList=answer.getDataList();
如果(选中。包含(选定)){
选中。删除(选中);
Log.d(“复选框”+buttonView.getId(),“未选中”);
}否则{
选中。添加(选中);
Log.d(“复选框”+按钮视图.getId(),“选中”);
}
}否则{
选中ArrayList=新建ArrayList();
选中。添加(选中);
子问题.getAnswer().setDataList(选中);
Log.d(“复选框”+按钮视图.getId(),“选中”);
}
}
if(subquestion.getQuestionType().equals(“多选单答”)){
RadioGroup group=buttonView;//无法完成
所选字符串=group.getFocusedChild().getId()+“”;
子问题.getAnswer().setData(选中);
Log.d(“Radiobutton”+selected+group.getFocusedChild().getId(),“selected”);
}
}
@凌驾
检查更改后的公共无效(RadioGroup组,int checkedId){
//这不起任何作用,甚至不能作为侦听器传递给RadioGroup
}
如何从buttonView获取RadioGroup?我在代码中生成所有内容,每次都不同,因此没有静态id来确定单击的内容。我把一个id传递给单选按钮,让我知道哪个是哪个,但我不能像这样到达它

它对复选框非常有效,只是Android似乎抛出了错误的事件,并对RadioGroup使用了错误的事件处理程序


谢谢你的阅读

为RadioGroup.OnCheckChangeListener调用此方法,并将RadioGroup作为参数传递

public void onRadioChangeListener(RadioGroup radioGroup){

    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // write your code here
        }
    });
}

你不应该在任何地方这样做,因为它会导致重大泄漏。现在,我通过在一个单独的类中指定组的类型来传递它是一个复选框还是一个外部的放射组,该类保存生成组所需的数据,并将其传递给活动以查看是什么。这是一个相当丑陋的黑客程序,但功能足够强大。正如您所说,您的onCheckedChangeListener不适用于RadioGroup,它会将事件传递给错误的onCheckedChangeListener。侦听器本身工作正常。您是否尝试将android:focusableInTouchMode=“false”设置为radioGroup?