我目前正在创建一个向现有表添加行的应用程序。代码如下所示:
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这样的教程时,没有任何东西必须先删除。 那究竟是我做错了什么?
答案 0 :(得分:2)
您的textview已经是另一个视图的孩子了。您不能简单地更改父级 - 您必须从一个父级中删除视图并将其添加到另一个父级。
仔细观察,您根本不需要手动将特定文本视图添加到表格行 - 根据您的xml它已经存在。
addView()方法通常为新创建的视图调用,而不是为您在xml中定义的视图。
答案 1 :(得分:1)
您在代码中添加到您已在XML文件中添加到tableRow的exampleLabel到同一个表。
由于UI元素只能有一个父元素,因此无法实现。
我也不知道为什么要再次添加它,因为它已经添加到完全相同的视图中。
在您的教程中,我找不到已添加到xml文件中的表的文本视图?