2016-12-21 5 views
-1

Я пытаюсь добавить радиокнопки в радиогруппы с макетом таблицы, когда я начал код. Я получаю некоторую ошибку. Вот мой кодКак добавить радиокнопки в группу радио в динамике 3 * 10 динамически динамически

RadioButton[] boxes = new RadioButton[30]; 
    RadioGroup rg = (RadioGroup) findViewById(R.id.radiogroup); 

    for (int i = 0; i < 30; i++) { 
     boxes[i] = (RadioButton) findViewById(idArray[i]); 
    } 

    for (int i = 0; i < 30; i++) { 
     rg.addView(boxes[i]); 
    } 

код Xml является here`

<TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TableRow 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="11-12(T1)" 
       android:id="@+id/radioButton0" 
       android:layout_column="9" 
       android:checked="false" /> 
      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="11-12(T2)" 
       android:id="@+id/radioButton10" 
       android:checked="false" 
       android:layout_marginLeft="40dp" /> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="11-12(T3)" 
       android:id="@+id/radioButton20" 
       android:layout_column="11" 
       android:checked="false" 
       android:layout_marginLeft="40dp" /> 
     </TableRow> 
    </TableLayout> 
</RadioGroup> 

Я не размещать весь код XML, потому что есть 10 строк таблицы, как каждый строка таблицы имеет 3 радио butttons поэтому у меня есть 30 радиокнопку в сетке 3 * 10. В java-коде ı получить такую ​​ошибку: «У указанного дочернего элемента уже есть родительский элемент. Сначала вы должны вызвать removeView() для родителя ребенка».

ответ

0

Добавить радиокнопки в RadioGroup, а затем RadioGroup в макет. И, наконец, используйте это, чтобы показать!

for (int i = 0; i < 10; i++) { 

      for (int j = 0; j < 3; j++) { 
       radioGroup[j].removeView(radioButton[i]); //now the RadioButtons are in the RadioGroup 
      } 
      rowLayout.removeView(radioGroup[j]); // now the RadiouGroup are in the row 
     } 
0

Как указано в журналах, радиокнопки уже имеют родительский элемент. Вы добавили их в таблицу строк в xml, что означает, что вы не можете добавить их к другому родителю (вашей радиогруппе). Кроме того, попробуйте ввести код для повторного использования кода, который вы уже писали. он будет более читабельным, вместо того, чтобы использовать одни и те же строки в xml. Например, рассмотрите использование тега include.

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

код для представления в ссылке: https://github.com/Gavras/MultiLineRadioGroup/blob/master/app/src/main/java/com/whygraphics/multilineradiogroup/MultiLineRadioGroup.java

забудьте также добавить эти:

значения/файла attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="multi_line_radio_group"> 
     <attr name="max_in_row" format="integer" /> 
     <attr name="radio_buttons" format="reference" /> 
     <attr name="default_button" format="string" /> 
    </declare-styleable> 
</resources> 

R.layout.table_layout:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/table_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:stretchColumns="*" /> 

R.lay out.table_row:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/table_row" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

R.layout.radio_button: (вы можете изменить размер текста здесь)

<?xml version="1.0" encoding="utf-8"?> 
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/radio_button" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="@dimen/radio_button_text_size" /> 

Пример использования этого макета из XML:

<?xml version="1.0" encoding="utf-8"?> 
<[package].MultiLineRadioGroup xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:multi_line_radio_group="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/multi_line_radio_group" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    multi_line_radio_group:max_in_row="3" 
    multi_line_radio_group:radio_buttons="@array/radio_buttons" /> 

из XML вы можете добавить res/values ​​/ arrays.xml с нужной строкой или добавить код, используя метод addButtons().

0

Это не работает из-за TableLayout внутри RadioGroup. Все RadioButtons не группируются из-за TableLayout между ними.

RadioButton должен быть прямым ребенком RadioGroup, иначе группировка не работает.