web-dev-qa-db-ja.com

プログラムでTableRowをTableLayoutに追加しても機能しない

私はコードに従ってテーブル行をプログラムで追加しようとしています here

_    /* Find Tablelayout defined in main.xml */
    TableLayout tl = (TableLayout) findViewById(R.id.SaleOrderLines);
    /* Create a new row to be added. */
    TableRow tr = new TableRow(this);
    tr.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    /* Create a Button to be the row-content. */
    Button b = new Button(this);
    b.setText("Dynamic Button");
    b.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    /* Add Button to row. */
    tr.addView(b);
    /* Add row to TableLayout. */
    //tr.setBackgroundResource(R.drawable.sf_gradient_03);
    tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
_

ただし、画面には何も描画されません。 (言及したものと同じ ここ

tr.setBackgroundResource(R.drawable.sf_gradient_03);を追加すると、背景画像のある行が描画されますが、ボタンは描画されません

これが私のレイアウトです

_<!-- Sale Order Lines START -->
<LinearLayout Android:id="@+id/SaleOrderLinesArea" Android:orientation="vertical"
     Android:layout_width="fill_parent" Android:layout_height="fill_parent"
     Android:padding="10dip" Android:background="@drawable/sf_gradient_11" >
    <LinearLayout Android:id="@+id/subHeaderArea" Android:padding="10dip"
            Android:layout_width="fill_parent" Android:layout_height="wrap_content"
        >
        <TextView Android:id="@+id/screenTitle"
            Android:layout_width="wrap_content" Android:layout_height="wrap_content"
            Android:textColor="@color/title_sub" Android:textStyle="bold"
            Android:text="Order Lines" />
    </LinearLayout>
    <TableLayout Android:id="@+id/SaleOrderLines"
        Android:layout_width="fill_parent" Android:layout_height="fill_parent"
        Android:padding="10dip" Android:stretchColumns="*">
        <TableRow
            Android:background="@drawable/sf_gradient_13" Android:padding="10dip"
            >
            <TextView Android:id="@+id/order_ref_label"
                Android:layout_width="fill_parent" Android:layout_height="wrap_content"
                Android:textColor="@color/fg_prime" Android:text="bLA bLA" />
            <TextView Android:id="@+id/product_label"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:textStyle="bold" Android:textColor="@color/fg_title"
                Android:text="@string/product" />
            <TextView Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:textStyle="bold" Android:textColor="@color/fg_title"
                Android:text="@string/product_quantity" />
        </TableRow>
        <TableRow Android:background="@drawable/sf_gradient_03"
            Android:paddingLeft="10dip" Android:paddingRight="10dip"
            >
            <TextView Android:id="@+id/order_ref_label"
                Android:layout_width="fill_parent" Android:layout_height="wrap_content"
                Android:textColor="@color/fg_prime" Android:text="Fooo" />
            <Spinner Android:id="@+id/product_spinner"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:Prompt="@string/customer_Prompt">
            </Spinner>
            <EditText Android:id="@+id/product_uom_qty"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:singleLine="true" Android:fadingEdge="horizontal" /> 
        </TableRow>
    </TableLayout>
    <LinearLayout Android:layout_width="fill_parent" Android:layout_height="wrap_content"
    Android:paddingTop="5dip" Android:paddingBottom="5dip">
        <Button Android:id="@+id/add_button" Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" Android:text="Add Lines" />
    </LinearLayout>
</LinearLayout>
<!-- Sale Order Lines END -->
_
45

わかった、すべてのLayoutParamstl.addView(...)に提供されたものを除いてAndroid.widget.TableRow.LayoutParamsでなければならない

/* Find Tablelayout defined in main.xml */
TableLayout tl = (TableLayout) findViewById(R.id.SaleOrderLines);
/* Create a new row to be added. */
TableRow tr = new TableRow(this);
tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
/* Create a Button to be the row-content. */
Button b = new Button(this);
b.setText("Dynamic Button");
b.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
/* Add Button to row. */
tr.addView(b);
/* Add row to TableLayout. */
//tr.setBackgroundResource(R.drawable.sf_gradient_03);
tl.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
134

コードは完璧ですが、使用しているクラスが適切でない可能性があることに注意してください。 import Android.view.ViewGroup.LayoutParamsを使用した可能性があります。正しいクラスは次のimportステートメントから入手できます。

インポートAndroid.widget.TableRow.LayoutParams

6
Satyendra

私の場合、幅をTableRow.LayoutParams.WRAP_CONTENTからTableRow.LayoutParams.MATCH_PARENTに変更しましたが、それで機能します。

TableRow tableRow = new TableRow(this);
tableRow.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));