Frage

Ich erstelle derzeit eine Anwendung, die Zeilen zu einer vorhandenen Tabelle hinzufügt. Der Code sieht so aus:

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 der XML habe ich ein Tischlayout in einem Linearlayout, das in einem Framelayout in einem tabwidget und es sieht so aus:

<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>

Das Erstellen dieser Etiketten funktioniert gut. Wenn ich den Text jedoch einer Zeile hinzufügen möchte, stürzt die Anwendung ab und ich erhalte eine "IllegalStateException", die detaillierte Nachricht lautet:

Das angegebene Kind hat bereits einen Elternteil. Sie müssen zuerst Remeview () auf dem Elternteil des Kindes anrufen.

Ich verstehe es nicht ganz. Wenn ich mir ein Tutorial ansehe wie Dies Es gibt nichts, was zuerst entfernt werden muss. Was genau mache ich falsch?

War es hilfreich?

Lösung

Das BeispielPlelabel, das Sie in Ihrem Code in die Tablerow hinzufügen, die Sie bereits in der XML -Datei in dieselbe Tabelle hinzugefügt haben.

Da ein UI -Element nur einen Elternteil haben kann, ist dies nicht möglich.

Ich weiß auch nicht, warum Sie es wieder hinzufügen möchten, da es bereits der gleichen Ansicht hinzugefügt wird.

In Ihrem Tutorial kann ich eine Textansicht finden, die der Tabelle in der XML -Datei bereits hinzugefügt wird?

Andere Tipps

Ihre Textansicht ist bereits ein Kind einer anderen Ansicht. Sie können den Elternteil nicht einfach ändern - Sie müssen die Ansicht von einem Elternteil entfernen und einem anderen hinzufügen.

Wenn Sie näher schauen, müssen Sie die bestimmte Textansicht einfach nicht manuell in die Tabellenzeile hinzufügen - sie ist bereits nach Ihrem XML vorhanden.

AddView () -Methode, die normalerweise für neu erstellte Ansichten aufgerufen werden, nicht für diejenigen, die Sie in XML definieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top