2016-12-21 58 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中使用相同的行。例如,考慮使用「包含」標籤。

也許會有所幫助。因爲我只是做了這個 - 表格佈局中的單選按鈕。這是一個自定義佈局。只是用它來添加任何你想要的單選按鈕:

視圖的代碼是在鏈接: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"?> 
<[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:使用XML從這個佈局(你可以在這裏更改文字大小)

<?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" /> 

例你可以用你想要的字符串 添加res/values/arrays.xml,或者使用addButtons()方法從代碼中添加。

0

由於RadioGroup內部的TableLayout,它不工作。由於它們之間的TableLayout,所有單選按鈕不會分組在一起。

RadioButton應該是RadioGroup的直接子節點,否則分組不起作用。