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));
    }

これにより、いくつかのヘッダー行を持つ 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>
4

0 に答える 0