Как получить значения из динамической радиогруппы Android?

Привет, я создал динамическую радиогруппу с radiobutton. Теперь я хочу получить значения из динамической радиогруппы. Ниже мой код

final RadioGroup rg = new RadioGroup(this);
            rg.setId(questionNo);

            RadioButton[] rb = new RadioButton[answers.length()];

            for (int i = 0; i < answers.length(); i++) {
                JSONObject answerObject = answers.getJSONObject(i);
                rb[i] = new RadioButton(this);
                rb[i].setText(answerObject.getString("AnswerValue"));
                rb[i].setId(answerObject.getInt("AnswerId"));

                rg.addView(rb[i]);
            }



rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(RadioGroup arg0, int arg1) {
                        int selectedId = rg.getCheckedRadioButtonId();
                        Log.i("ID", String.valueOf(selectedId));

                    }
                });

Событие нажатия кнопки

submit_button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(rg.getCheckedRadioButtonId()!=-1){
                int id= rg.getCheckedRadioButtonId();
                View radioButton = rg.findViewById(id);
                int radioId = rg.indexOfChild(radioButton);
                RadioButton btn = (RadioButton) rg.getChildAt(radioId);
                String selection = (String) btn.getText();
                Log.i("selection", selection);

            }
            }
        });

Я получаю только последний индекс радиогруппы.

2 ответа

Я знаю, что уже слишком поздно, но это может помочь кому-то еще

При создании динамической группы радиобутонов создайте родительский макет (линейный макет или относительный макет)

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

Создание Нет Динамической Радиогруппы

  • Создать все динамические радиогруппы в родительском макете
  • Добавить все переключатели в группу
  • Добавить все радиогруппы в родительский макет

        public RadioButton[] rb;
        public RadioGroup grp;
        public LinearLayout layoutmain;             //Parent layout
    
    for(int i=0;i<qus.size();i++)                   //No of Questions
    {
    
        rb = new RadioButton[size];
        grp = new RadioGroup(this);
    
        grp.setId(a+qus.get(i).qusetionId);
    
        for(int j=0;j<qus.get(i).choices.size();j++)    //No of Radio button in radio group
        {
    
            rb[j] = new RadioButton(this);
            rb[j].setText(qus.get(i).choices.get(j).getChoiceText());
            grp.addView(rb[j]);                         // adding button to group
    
        }
        layoutmain.addView(grp);                        // adding group to layout
    }
    

Получить все выбранные задачи кнопки

  • От родителя раскладка достанется всем дочерним
  • Найти все радиогруппы, используя детский экземпляр
  • Создать объект для этой радиогруппы
  • используя этот объект, получите выбранную радио-кнопку

    Button bt = (Button) findViewById(R.id.button);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    
            for(int i=0;i<layoutmain.getChildCount();i++)  //From the parent layout (Linear Layout) get the child
            {
                View child = layoutmain.getChildAt(i);  
    
                if(child instanceof RadioGroup)     //Check weather its RadioGroup using its INSTANCE
                {
                    RadioGroup rg = (RadioGroup) child; //create a RadioButton for each group
                    int selectedId = rg.getCheckedRadioButtonId(); // get the selected button
    
                        RadioButton radiochecked = (RadioButton) findViewById(selectedId);
                        Log.e("Radio",radiochecked.getText().toString());   //from the button get the selected text
    
                }
            }
        } });
    

Вы можете получить этот Soln таким образом

radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
     void onCheckedChanged(RadioGroup rg, int checkedId) {
          for(int i=0; i<rg.getChildCount(); i++) {
               RadioButton btn = (RadioButton) rg.getChildAt(i);
               if(btn.getId() == checkedId) {
                    String text = btn.getText();
                    // do something with text
                    return;
               }
          }
     }
});
Другие вопросы по тегам