RadioGroups
прославляются за кулисами LinearLayouts, это означает, что они могут поддерживать любых детей, но будут обрабатывать RadioButtons
в той же «группе», если они являются прямыми детьми Группа . Например:
Представьте себе эту иерархию:
<RadioGroup> // THIS YOU HAVE IN XML
<RadioButton 1> // ALL THESE YOU CREATE PROGRAMMATICALLY
<RadioButton 2>
<RadioButton 3>
</RadioGroup>
Итак, ваш XML выглядит так:
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/your_radio_button"
android:layout_width=“match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Radio Buttons will be programmatically added here -->
</RadioGroup>
Итак ... вы создаете все программно, это нормально. У вас есть «петля», как ...
final RadioGroup group = //find your_radio_button in the layout.
// now iterate
for (Something something : listOfSomethings) {
final RadioButton rb = new RadioButton(context);
rb.setId(View.generateViewId());
rb.setText(something.giveMeTheText());
rb.setLayoutParams(layoutParams); // make these depending what your container for the RadioGroup is.
rb.setOnCheckedChangeListener(your OnCheckedChangeListener);
group.add(rb);
}
Если вам нужно прослушать изменения, очевидно, добавьте общий CompoundButton.OnCheckedChangeListener
и переопределите:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// do what you need ;)
}
Имейте в виду, что в тот момент, когда вы делаете group.add(rb)
, если у кнопки есть onCheckedChangeListener
, она срабатывает ... если вы установите ее как отмеченную (я думаю, что она также срабатывает, даже если вы не указали «false» ”), Поэтому вы можете отложить назначение слушателя до тех пор, пока не закончите добавление кнопок в RadioGroup, а затем выполните итерацию их и добавление их всех одновременно (что не вызывает обратный вызов прямо здесь, потому что кнопки УЖЕ в иерархии и не изменилось).
Если вам нужно вставить что-то , отличное , кроме RadioButton, в качестве прямого потомка вашего RadioGroup
, это тема для другого вопроса (это выполнимо, а не автоматически и потребует от вас дополнительной работы ).