android中没有显示动态添加的行

时间:2016-06-10 13:01:57

标签: java android xml

请帮忙。当我调试应用程序时,添加了行,但是表格没有显示在屏幕上我单独创建了tablerow的xml,而tablelayout是在主xml文件中

    table = (TableLayout) findViewById(R.id.goodsTable);

     for (int i = 0; i < attrName.length; i++) {
                            TableRow row = (TableRow) LayoutInflater.from(getApplicationContext()).inflate(R.layout.attribute_row, null);
                            ((TextView) row.findViewById(R.id.attributeName)).setText(attrName[i]);
                            ((TextView) row.findViewById(R.id.attributeValue)).setText(barcode);
                            table.addView(row);
                        }

attribute_row xml:

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/attributeName"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:textStyle="bold"
        />

    <TextView
        android:id="@+id/attributeValue"
        android:layout_height="wrap_content"
        android:gravity="right" />
</TableRow>

主xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:orientation="horizontal"
        android:padding="10dp">
        <EditText
            android:id="@+id/goodsBarcode"
            android:layout_width="262dp"
            android:layout_height="wrap_content"
            android:inputType="textCapWords"
            android:padding="10dp"
            android:singleLine="false"
            android:background="@android:color/transparent" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="search"
            android:id="@+id/search"
             />
        </LinearLayout>
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/details"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >
            <TableLayout
                android:id="@+id/goodsTable"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

            </TableLayout>
        </LinearLayout>
    </ScrollView>


</LinearLayout>

请帮助; 当我调试应用程序时,添加行但屏幕上不显示表 我已经为tablerow单独创建了xml 和tablelayout在主xml文件中

4 个答案:

答案 0 :(得分:1)

添加所有行后,只需在表对象上调用此方法,即可在UI上反映新添加的行:

requestLayout()

我有一个类似的代码,并通过添加<TableLayout android:id="@+id/myTable" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="5dp"> <!--Dynamic content here--> </TableLayout> 方法正常工作。

布局xml文件中的动态表如下所示:

android:layout_width

注意:TableLayout的{​​{1}}和包含它的任何其他视图应为match_parent。因为wrap_content会在您添加新行时导致调整大小问题。

答案 1 :(得分:1)

调用null时不要将inflate(...)作为父项传递,因为它无法确定引用父项的属性(例如android:layout_width,android:layout_height)。

改为:

TableRow row = (TableRow) LayoutInflater.from(getApplicationContext()).inflate(R.layout.attribute_row, table, false);

答案 2 :(得分:0)

尝试设置table.addView(row,i);

或者您可以动态创建和添加行。

 TableRow row;

    for (int i = 0; i <=lstfDue.size(); i++)
    {
        row= new TableRow(this);
        row.setLayoutParams(rowParams);

        txtDate = new TextView(this);
        txtAmount = new TextView(this);

        txtDate.setText("text here");
        txtAmount.setText("text here");

        row.addView(txtDate);
        row.addView(txtFeeType);
        row.addView(txtAmount);
        tblFeesDue.addView(row, i);
    }

答案 3 :(得分:0)

在与我的代码挣扎两天后,终于解决了问题,我的错误是使用“ApplicationContext”而不是“Activity Context”;我需要用        TableRow row =(TableRow)Inflater.from(this).inflate(R.layout.attribute_row,table,false);代替        TableRow row =(TableRow)LayoutInflater.from(getApplicationContext())。inflate(R.layout.attribute_row,table,false);