Как получить значения из динамической радиогруппы 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;
}
}
}
});