Ich mag so etwas wie diese (RTL) implementieren:Absturz versucht Blick auf eine Tabelle hinzuzufügen, dynamisch (Android)
Mit anderen Worten, Ansichten in der Lage, in dem ein Layout in 3 Spalten. Ich habe versucht, dies zu tun:
my_fragment.xml:
...
<TableLayout
android:id="@+id/myTable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"
android:stretchColumns="*"
android:layout_margin="10dp"
android:background="@color/background_color">
</TableLayout >
...
myFragment.java:
TableRow[] tableRows = new TableRow[ serverResponse.getData().size()/3 ];
for(int i=0, j=0; i<serverResponse.getData().size() ;i++)
{
View customView = inflater.inflate(R.layout.data_item, tableRows[j], true);
((TextView) customView.findViewById(R.id.viewText)).setText(serverResponse.getData().get(i).getItemData());
if(i%3 == 0) {
j++;
}
myTable.addView(tableRows[i] , new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
}
Crash: Cannot add a null child view to a ViewGroup
EDIT: dank Mike M.‘ s Lösung funktioniert es jetzt. Jedoch wird eine Spalte immer geschnitten:
Die data_item.xml ist einfach:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right">
<TextView
android:id="@+id/viewText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:ellipsize="end"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:background="@drawable/circle"/>
</LinearLayout>
Sie initialisieren das Array von 'TableRow's, aber Sie initialisieren nicht die einzelnen Elemente, also sind sie' null'. –
Ich bin verwirrt .. die Elemente sollten die customViews erhalten .. was passiert im "inflat" Teil. Nein? – BVtp
Jedes Element in einem Array von Objekten muss initialisiert werden. Wenn Sie das Array gerade initialisieren, ist jedes Element "null". Das heißt, Sie müssen 'new TableRow (getContext())' für jede neue Zeile aufrufen. Außerdem ist Ihre Logik für die Erstellung Ihres Tisches nicht optimal. Sie verwenden zwei verschachtelte For-Loops besser. –