将视图添加到Android上的TableRow时出现IllegalStateException

时间:2011-01-31 12:31:33

标签: android android-tablelayout illegalstateexception

我目前正在创建一个向现有表添加行的应用程序。代码如下所示:

TextView exampleTextView = (TextView) messageView.findViewById(R.id.exampleLabel);
exampleTextView.setText(locationMsg.getMessageContent());

TableRow tr = (TableRow) messageView.findViewById(R.id.tableRow);
tr.addView(exampleTextView);
table.addView(tr);

在XML中我有一个表格布局,它位于一个tabLay里面的一个frameLayout内的linearLayout中,它看起来像这样:

<TableLayout
 android:id="@+id/distanceTable" 
 android:layout_height="wrap_content"
 android:layout_width="wrap_content"
 android:layout_gravity="center"
 android:background="#DDDDDD"
 android:stretchColumns="1" >
 <TableRow>
  <TextView
  android:textColor="#000000"
  android:text="@string/label_device"
  android:layout_gravity="center"
  android:padding="3dip"
  android:textSize="18sp" />

  <TextView
  android:textColor="#000000"
  android:text="@string/label_distance"
  android:layout_gravity="center"
  android:padding="3dip"
  android:textSize="18sp" />
  <TextView
  android:textColor="#000000"
  android:text="@string/label_time"
  android:layout_gravity="center"
  android:padding="3dip"
  android:textSize="18sp" />
 </TableRow>
 <TableRow android:id="@+id/tableRow" >
  <TextView
  android:id="@+id/exampleLabel"
  android:textColor="#000000"
  android:layout_gravity="center"
  android:padding="3dip"
  android:textSize="18sp" />
  <TextView
  android:id="@+id/anotherExampleLabel"
  android:textColor="#000000"
  android:layout_gravity="center"
  android:padding="3dip"
  android:textSize="18sp" />
  <TextView
  android:id="@+id/someOtherLabel"
  android:textColor="#000000"
  android:layout_gravity="center"
  android:padding="3dip"
  android:textSize="18sp" />
 </TableRow>
</TableLayout>

创建这些标签工作正常,但是当我想将文本添加到一行时,应用程序崩溃并且我收到“IllegalStateException”,详细消息是:

  

指定的孩子已经有父母。你必须调用removeView()   先关于孩子的父母。

我不太明白。当我查看像this这样的教程时,没有任何东西必须先删除。 那究竟是我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的textview已经是另一个视图的孩子了。您不能简单地更改父级 - 您必须从一个父级中删除视图并将其添加到另一个父级。

仔细观察,您根本不需要手动将特定文本视图添加到表格行 - 根据您的xml它已经存在。

addView()方法通常为新创建的视图调用,而不是为您在xml中定义的视图。

答案 1 :(得分:1)

您在代码中添加到您已在XML文件中添加到tableRow的exampleLabel到同一个表。

由于UI元素只能有一个父元素,因此无法实现。

我也不知道为什么要再次添加它,因为它已经添加到完全相同的视图中。

在您的教程中,我找不到已添加到xml文件中的表的文本视图?