2

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

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 中,我有一个表格布局,它位于一个 linearLayout 内,它位于一个 frameLayout 内,位于一个 tabwidget 内,它看起来像这样:

<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()。

我不太明白。当我查看这样的教程时没有任何东西必须首先删除。那么我到底做错了什么?

4

2 回答 2

2

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

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

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

于 2011-01-31T12:36:23.793 回答
1

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

由于 UI 元素只能有一个父元素,因此这是不可能的。

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

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

于 2011-01-31T12:35:31.883 回答