2

几天以来我一直在努力解决这个问题,现在已经搜索了很多论坛,但现在我感到沮丧。:(

我正在尝试通过代码动态构建表格。我成功地能够使用 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>
4

0 回答 0