私は数日からこの問題に苦労してきましたが、これと一緒に多くのフォーラムを検索しましたが、今ではコアに不満を感じています. :(
コードを使用してテーブルを動的に構築しようとしています。forループを使用して、コードから新しい列と新しい行を正常に追加できました。
次のようなコードを使用して正常に実行しています。
TableLayout tl = (TableLayout) findViewById(R.id.tblCosts);
for (int hi = 0; hi < 4; hi++ ) {
tr = new TableRow(this);
tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
// Create a text view to be the row-content.
for (int i = 0; i < 10; i++) {
TextView tv = new TextView(this);
tv.setText("Dummy data" + i);
tv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tv.setBackgroundResource(R.drawable.shape);
tv.setPadding(5, 5, 5, 5);
// Add text View to row.
tr.addView(tv);
}
// Add row to TableLayout.
tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
これにより、いくつかのヘッダー行を持つ xml で既に構築されたテーブルに完全な 4X10 テーブルが得られます。
ただし、xml から参照されている既に構築された行にいくつかのビューを動的に追加しようとすると、コードがエラー「java.lang.IllegalStateException: 指定された子には既に親があります。子の親で removeView() を呼び出す必要があります」がスローされます。最初。 "
以下は私が使用しているコードです
TableLayout tl = (TableLayout) findViewById(R.id.tblCosts);
// Create a new rows to be added.
TableRow tr = (TableRow) findViewById(R.id.tRheadercost2);
for (int hi = 0; hi < 4; hi++) {
TextView tvname = new TextView(this);
tvname.setText("Name"+hi);
tvname.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tvname.setLayoutParams(new LayoutParams(5+hi));
tvname.setBackgroundResource(R.drawable.shapegreywithborder);
tvname.setPadding(5, 5, 5, 5);
// Add text view to row.
tr.addView(tvname);
}
tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
ここでは、xml に、layout_span が 4 (5 列) の行 R.id.tRheadercost2 を既に作成しています。コードで、列 5 の後に同じ行にさらに列を動的に追加したいと考えています。
Java xml のスニペットを次に示します。
<TableRow android:id="@+id/tRheadercost2"
android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView android:textColor="#000" android:background="@drawable/shapegreywithborder"
android:layout_height="match_parent" android:padding="5dp"
android:text="" android:layout_width="match_parent" android:layout_column="0" android:layout_span="4"></TextView>
</TableRow>