TableRow为null,即使它已在XML中声明

时间:2014-08-12 20:32:16

标签: android nullpointerexception tablelayout

我有一个声明此TableLayout的XML文件:

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/text" />

    </TableRow>
</TableLayout>

然后在我的片段onCreateView中,我通过Id找到它:

TableRow row1 = (TableRow) view.findViewById(R.id.tableRow1);
TableRow row2 = (TableRow) view.findViewById(R.id.tableRow2);

然后在onClick的一些观点中,我尝试这样做:

TextView nameView = new TextView(getActivity());
//sets the column to skip the first one
nameView.setLayoutParams(new TableRow.LayoutParams(i + 1));
nameView.setText(materialNames[i]);
row1.addView(nameView);

并且无缘无故地抛出nullpointer。我使用这个完全相同的方法从我的XML中查找其他视图,它工作正常,但由于某种原因,它认为那些TableRows是null。我试过打扫这个项目。知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:0)

我的朋友找到了解决这个问题的方法。 row1和row2变量首先在我的片段中声明为全局变量。然后在onCreateView中,而不是实际初始化它们,我在onCreateView方法中创建了新的局部变量,其名称与全局变量相同。这非常难以找到,并且修复如下:

row1 = (TableRow) view.findViewById(R.id.tableRow1);
row2 = (TableRow) view.findViewById(R.id.tableRow2);

我为浪费你的时间道歉。