2013-01-03 8 views
9

Jestem nowy na Androida i próbuję programowo dodać TableRow, który już zrobiłem z xml, do TableLayout. Otrzymuję Force Closes, większość to NullPointerExcpetions.Jak programowo wstawić TableRow z xml do TableLayout?

Oto moja klasa 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; 
} 
} 

To mój układ z 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> 

A 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> 

Próbowałem wiele różnych sposobów, aby to osiągnąć ale wciąż nic.

Odpowiedz

9

Wymień kod:

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

z

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

TAK! Dziękuję bardzo za rozwiązanie mojego problemu. Czy możesz mi również powiedzieć, jak dodać ten sam widok więcej niż raz? Dziecko ma już rodzica, więc nie mogę dodać go więcej po prostu umieszczając tl.addView (tr); – Chris95X8

+0

powtórz kod wewnątrz pętli. ale pamiętaj, że masz utworzoną tablicę widoków przed powtórzeniem w pętli for. następnie dla każdego widoku w tablicy nadmuchaj table_row_layout i dodaj go do Table Layout. – TNR

+0

Właśnie zrobiłem to w ten sposób i to działało for (int i = 0; i <7; i ++) { \t \t \t \t \t Zobacz tr = inflater.inflate (R.layout.subject_row, null, false) ; \t \t tl.addView (tr); \t \t \t \t} – Chris95X8

Powiązane problemy