从部分XML向TableLayout添加更多行

时间:2015-03-31 19:12:14

标签: java android xml

所以我试图在我的java应用程序中用更多行来扩充TableLayout

以下是我目前正在运行的代码:

        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));

        //The part that fails
        TableLayout table = (TableLayout) findViewById(R.id.toastTable);
        View row = getLayoutInflater().inflate(R.layout.toast_table_layout_row, (ViewGroup) findViewById(R.id.toast_row));
        table.addView(row);

        Toast toast = new Toast(getApplicationContext());
        toast.setGravity(Gravity.CENTER_VERTICAL, 0 ,0);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();

这是我的xml文件:

toast_layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/toast_layout_root"
              android:orientation="horizontal"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="8dp"
              android:background="#c3484848">

    <TableLayout
        android:id="@+id/toastTable"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TableRow
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" >

            <TextView
                android:tag="toast_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight=".50"
                android:text="Kultuur"
                android:textAllCaps="true"/>

            <TextView
                android:tag="toast_params"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight=".50"
                android:text="1000 tera mass g"
                android:textAllCaps="true"/>
        </TableRow>

    </TableLayout>
</RelativeLayout>

toast_table_layout:

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

    <TextView
        android:tag="toast_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".50"
        android:text="Kultuur"
        android:textAllCaps="true"/>

    <TextView
        android:tag="toast_params"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".50"
        android:text="1000 tera mass g"
        android:textAllCaps="true"/>
</TableRow>

我的想法是,我想在现有的TableLayout中添加更多行 如果我删除了使用//The part that fails注释的代码,那么我会看到一个显示TableLayout并带有一点文字的吐司。

但是添加更多行会因NullPointException而失败。 我不确定应该如何正确完成。最终结果应该是我在循环中添加这些行,并通过他们拥有的标记获取TextField将其TextField文本更改为其他内容。

1 个答案:

答案 0 :(得分:1)

您已从膨胀的视图调用findViewById(),因为您的toastTable位于toast_layout_root中。只是改变

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

TableLayout table = (TableLayout)layout.findViewById(R.id.toastTable);