几天以来我一直在努力解决这个问题,现在已经搜索了很多论坛,但现在我感到沮丧。:(
我正在尝试通过代码动态构建表格。我成功地能够使用 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));
}
这为我提供了完美的 4X10 表到 xml 中已构建的表,其中包含一些标题行。
但是,当我尝试将几个视图动态添加到从 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 中构建了一行 R.id.tRheadercost2,layout_span 为 4(5 列)。我希望我的代码在第 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>