динамически созданная радиогруппа не проверяется на слух сменить слушателя

Я создал динамическую радиогруппу с 3 радиокнопками. Моя проблема в том, что все 3 кнопки можно нажимать, а радиогруппа не слышит для проверки изменений. Я хотел бы, чтобы радиокнопки по умолчанию устанавливались внутри группы радиокнопок, где можно проверить только одну радиокнопку.

RadioButton[] rb = new RadioButton[question.getAnswers().size()];
RadioGroup rg = new RadioGroup(getActivity());
rg.setOrientation(RadioGroup.VERTICAL);
questionContainer.addView(rg);

for (int i =0; i < question.getAnswers().size(); i++) {
    rb[i] = new RadioButton(getActivity());
    rb[i].setText(question.getAnswers().get(i));
    rg.addView(rb[i]);
}
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
         Log.e(debugTag, "radio button position: "+checkedId);
    }
});

questionContainer - это контейнер LinearLayout моего фрагмента.


person tsiro    schedule 26.06.2016    source источник
comment
Вы пытались установить идентификаторы для динамически добавляемых переключателей? rb[i].setId(some_unique_id);   -  person x0r    schedule 26.06.2016
comment
да, но безрезультатно...   -  person tsiro    schedule 26.06.2016
comment
я думаю, что проблема связана с библиотекой, которую я использую для создания переключателей... кнопки Android по умолчанию работают как положено... только что протестировано   -  person tsiro    schedule 26.06.2016
comment
Да, именно. Я тоже пробовал. что за библиотека?   -  person x0r    schedule 26.06.2016
comment
github.com/rey5137/material#features   -  person tsiro    schedule 26.06.2016
comment
о, я тоже пользовалась. Проблема в том, что эта библиотека использует CompoundButton вместо RadioButton. Есть несколько решений этой проблемы, проверьте это и это   -  person x0r    schedule 26.06.2016


Ответы (1)


проблема на самом деле возникла из библиотеки, которую я использую для создания переключателя. После некоторого копания и двух очень полезных ссылок, предоставленных @R. Кирилл Я не создаю RadioGroup для размещения радиокнопок внутри нее. Я просто обрабатываю CompoundButton (RadioButton, расширенный из этого класса), сам проверял прослушиватель изменений.

final RadioButton[] rb = new RadioButton[question.getAnswers().size()];

com.rey.material.widget.CompoundButton.OnCheckedChangeListener c = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
        if (isChecked) {
            for (RadioButton aRb : rb) {
                aRb.setChecked(aRb == compoundButton);
            }
        }
    }
};

for (int i =0; i < question.getAnswers().size(); i++) {
    rb[i] = new RadioButton(getActivity());
    rb[i].setId(i);
    rb[i].setOnCheckedChangeListener(c);
    rb[i].setChecked(false);
    rb[i].setText(question.getAnswers().get(i));
    questionContainer.addView(rb[i]);
}
person tsiro    schedule 26.06.2016