Динамически добавленные RadioButton не слушают onCheckChangedListener () - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно динамически добавлять RadioGroups и RadioButton, генерировать желаемое представление и реализовывать onCheckChangedListener () в моей динамически создаваемой RadioGroup.Проблема в том, что, когда недавно добавленная кнопка отмечена, она не снимается, когда я нажимаю другую кнопку.Я уже проверил это - Проблема в радиогруппе при динамическом добавлении радиокнопок , но безрезультатно.

Я работаю с фрагментом и динамически добавляю в него представления.Радиокнопки не показывают изменения поведения.Пожалуйста, помогите мне разобраться с этим.

//optionsGroup(RadioGroup),optionButton(RadioButton) 

    optionsGroup = new RadioGroup(getActivity());
    optionsGroup.setId(radioGroupCount);
    optionsGroup.setPadding(20, 20, 20, 20);
    optionsGroup.setLayoutParams(layparams);
    radioGroupList.add(optionsGroup);
    ArrayList<Options> RadioButtonOptions = question.getQuestionOptions().getOptions();
    for (int i = 0; i < RadioButtonOptions.size(); i++) {
        optionButton = new RadioButton(getActivity());
        optionButton.setId(i);
        optionButton.setText(RadioButtonOptions.get(i).getOptionValue());
        optionsGroup.addView(optionButton);
        optionsGroup.clearCheck();
    }
    optionsGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
          for(int rb=0;rb<optionsGroup.getChildCount();rb++){
              RadioButton btn = (RadioButton) optionsGroup.getChildAt(rb);
              if(checkedId==btn.getId()){
                  radioGroupAnswerList.clear();
                  radioGroupAnswerList.add(btn.getText().toString());
                  return;
              }

          }
        }
    });
    holderlayout.addView(optionsGroup);

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам нужно снять отметку с другой радиокнопки, если одна радиокнопка нажата, верно?и все это будет динамически создаваемое радио-кнопка и радио-группа .. тогда вы должны сделать это ..

//optionsGroup(RadioGroup),optionButton(RadioButton) 

optionsGroup = new RadioGroup(getActivity());
optionsGroup.setId(radioGroupCount);
optionsGroup.setPadding(20, 20, 20, 20);
optionsGroup.setLayoutParams(layparams);
radioGroupList.add(optionsGroup);
ArrayList<Options> RadioButtonOptions = question.getQuestionOptions().getOptions();
for (int i = 0; i < RadioButtonOptions.size(); i++) {
    optionButton = new RadioButton(getActivity());
    optionButton.setId(i);
    optionButton.setText(RadioButtonOptions.get(i).getOptionValue());
    optionsGroup.addView(optionButton);
    optionsGroup.clearCheck();
}
optionsGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
      for(int rb=0;rb<optionsGroup.getChildCount();rb++){
          RadioButton btn = (RadioButton) optionsGroup.getChildAt(rb);
          if(checkedId==btn.getId()){
              radioGroupAnswerList.clear();
              radioGroupAnswerList.add(btn.getText().toString());
              optionsGroup.clearCheck();
               if (isChecked) {
                 optionsGroup.check(btn.getId());
              }
              return;
          }

      }
    }
});
holderlayout.addView(optionsGroup);
0 голосов
/ 11 февраля 2019

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

for (int i = 0; i < RadioButtonOptions.size(); i++) {
        optionButton = new RadioButton(getActivity());
        optionButton.setId(i);
        optionButton.setText(RadioButtonOptions.get(i).getOptionValue());


    optionsGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
          for(int rb=0;rb<optionsGroup.getChildCount();rb++){
              RadioButton btn = (RadioButton) optionsGroup.getChildAt(rb);
              if(checkedId==btn.getId()){
                  radioGroupAnswerList.clear();
                  radioGroupAnswerList.add(btn.getText().toString());
                  return;
              }

          }
        }
    });
 optionsGroup.addView(optionButton);
}
...