Android RadioGroup OnCheckedChangeListener

1.3k Views Asked by At

I have an Activity which implements both Checkbox.OnCheckedChangeListener and RadioGroup.OnCheckedChangeListener The groups are both dynamically generated and passed the same Activity as the listener.

However, when I click on a RadioGroup, the RadioGroup.OnCheckChangeListener is completely ignored but here's where it gets weird. It triggers CheckBox.OnCheckChangeListener! I tried casting the activity to the RadioGroup listener before passing it, but RadioGroup cannot even accept it, only the CheckBox listener gets through.

@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
        }

How do I get the RadioGroup from the buttonView? I generate everything in code and it's different every time so there are no static id's to determine what's clicked. I pass an id to the radiobuttons to let me know which is which but I can't get to it like this.

It works perfectly for the checkboxes, it's just that Android seems to throw the wrong event and uses the wrong event handler for RadioGroup.

Thank you for reading!

1

There are 1 best solutions below

3
On

Call this method for RadioGroup.OnCheckChangeListener and pass RadioGroup as argument

public void onRadioChangeListener(RadioGroup radioGroup){

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