2013-01-03 20 views
9

Sono nuovo per Android e sto cercando di aggiungere un TableRow, che ho già creato con xml, a un TableLayout a livello di programmazione. Sto ottenendo Chiusura forzata, la maggior parte sono NullPointerExcpetions.Come aggiungere TableRow da xml a TableLayout a livello di programmazione?

Ecco la mia classe Java

public class DayFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.subjects_list, container, false); 


    TableLayout tl = (TableLayout) view.findViewById(R.id.tl); 
    TableRow tr = (TableRow) view.findViewById(R.id.tr_row); 

      tl.addView(tr); //not working, obviously im missing something 

    //xml parsing stuff 

      return view; 
} 
} 

Questo è il mio layout con la TableLayout:

<?xml version="1.0" encoding="utf-8"?> 
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/horizontalScrollView1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:paddingTop="5dp" > 

<ScrollView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:fillViewport="true" 
    android:orientation="vertical" > 

    <TableLayout 
     android:id="@+id/tl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <include 
      android:id="@+id/header" 
      layout="@layout/table_header" /> 

     <include android:id="@+id/h_divider" 
      layout="@layout/horizontal_divider"/> 




    </TableLayout> 
</ScrollView> 

</HorizontalScrollView> 

E il TableRow:

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

<TextView 
    android:id="@+id/tv_hour" 
    android:layout_weight="1" 
    android:gravity="center" 
    android:padding="8dp" 
    android:textSize="15sp" 
    android:textStyle="bold" /> 

<View 
    android:layout_weight="1" 
    android:background="@drawable/vertical_cell_divider" /> 

<TextView 
    android:id="@+id/tv_subject" 
    android:layout_weight="1" 
    android:gravity="left" 
    android:padding="8dp" 
    android:textSize="18sp" /> 

<View 
    android:layout_weight="1" 
    android:background="@drawable/vertical_cell_divider" /> 

<TextView 
    android:id="@+id/tv_start" 
    android:layout_weight="1" 
    android:gravity="left" 
    android:padding="8dp" 
    android:textSize="18sp" /> 

<TextView 
    android:id="@+id/tv_bar" 
    android:layout_weight="1" 
    android:gravity="left" 
    android:textSize="18sp" /> 

<TextView 
    android:id="@+id/tv_end" 
    android:layout_weight="1" 
    android:gravity="left" 
    android:padding="8dp" 
    android:textSize="18sp" /> 

</TableRow> 

ho provato un sacco di modi diversi per realizzarla ma ancora niente.

risposta

9

Sostituire codice:

TableRow tr = (TableRow) view.findViewById(R.id.tr_row); 
tl.addView(tr); //not working, obviously im missing something 

con

View tr = inflater.inflate(R.layout.table_row_layout, null,false); 
tl.addView(tr); //not working, obviously im missing something 
+0

SI! Grazie mille per aver risolto il mio problema. Puoi dirmi anche come aggiungere la stessa vista più di una volta per favore? Il bambino ha già un genitore quindi non posso aggiungerlo di più semplicemente mettendo tl.addView (tr); – Chris95X8

+0

ripeti il ​​codice all'interno per ciclo. ma tieni presente che hai creato l'array di visualizzazione prima di ripetere il ciclo for. quindi per ogni vista dell'array gonfiare il table_row_layout e aggiungerlo al layout tabella. – TNR

+0

ho appena fatto come questo e ha funzionato for (int i = 0; i <7; i ++) { \t \t \t \t \t View TR = inflater.inflate (R.layout.subject_row, null, false) ; \t \t tl.addView (tr); \t \t \t \t} – Chris95X8