在 Android 上向 TableRow 添加视图时出现 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 中,我有一个表格布局,位于 LinearLayout 内,该布局位于 tabwidget 内的frameLayout 内,看起来像这样:
<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 这样的教程时,没有任何东西需要首先删除。 那么我究竟做错了什么?
I'm currently creating an application that adds rows to an existing table. The code looks like this:
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);
In the XML I've got a table layout that's inside a linearLayout thats inside a frameLayout thats inside a tabwidget and it looks like this:
<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>
Creating those labels works fine, but when I want to add the text to a row, the application crashes and I get an "IllegalStateException", the detailed message is:
The specified child already has a parent. You must call removeView()
on the child's parent first.
I don't quite get it. When I look at a tutorial like this there isn't anything that has to be removed first.
So what exactly am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的文本视图已经是另一个视图的子视图。您不能简单地更改父级 - 您必须从一个父级中删除视图并将其添加到另一个父级中。
仔细观察,您根本不必手动将特定的文本视图添加到表行中 - 根据您的 xml,它已经存在了。
addView() 方法通常为新创建的视图调用,而不是为您在 xml 中定义的视图调用。
Your textview is already a child of another view. You cannot simply change the parent - you must remove the view from one parent and add it to another.
Looking closer, you simply don't have to manually add the particular text view to the table row - it is already there according to your xml.
addView() method usually invoked for newly created views, not for the ones you define in xml.
您在代码中添加到 tableRow 的 exampleLabel,您已在 XML 文件中添加到同一个表。
由于 UI 元素只能有一个父元素,因此这是不可能的。
我也不知道为什么你想再次添加它,因为它已经添加到完全相同的视图中。
在您的教程中,我找不到已添加到 xml 文件中的表中的文本视图?
The exampleLabel that you add in your code to the tableRow you added already in the XML file to the same table.
Since a UI element can only have one parent, this isn't possible.
I also don't know why you want to add it again, since it is already added to the exactly same view.
In your tutorial I can0t find a textview that is already added to the table in the xml file?