Question

Je crée actuellement une application qui ajoute des lignes à une table existante. Le code ressemble à ceci:

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

Dans le XML j'ai une disposition de table qui est à l'intérieur d'un thats LinearLayout dans un thats frameLayout l'intérieur d'un tabwidget et il ressemble à ceci:

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

Créer ces étiquettes fonctionne très bien, mais quand je veux ajouter le texte à une ligne, l'application se bloque et je reçois un « IllegalStateException », le message est détaillé:

L'enfant spécifié a déjà un parent. Vous devez appeler removeView () sur les parents de l'enfant d'abord.

Je ne comprends pas bien. Quand je regarde un tutoriel comme cette il n'y a rien qui doit être retiré en premier. Alors, que suis exactement je fais mal?

Était-ce utile?

La solution

Le exampleLabel que vous ajoutez dans votre code à l'tablerow vous avez ajouté déjà dans le fichier XML à la même table.

Depuis un élément d'interface ne peut avoir qu'un seul parent, ce n'est pas possible.

Je ne sais pas aussi pourquoi vous voulez ajouter à nouveau, car il est déjà ajouté à la vue exactement le même.

Dans votre tutoriel, je can0t trouver un textview qui est déjà ajouté à la table dans le fichier xml?

Autres conseils

Votre textview est déjà un enfant d'une autre vue. Vous ne pouvez pas simplement changer le parent - vous devez supprimer la vue d'un parent et l'ajouter à une autre.

regardant de plus près, vous simplement ne pas ajouter manuellement l'affichage de texte particulier à la ligne de table -. Il est déjà là selon votre xml

méthode addView () généralement invoqué pour les vues nouvellement créées, non pas pour ceux que vous définissez dans xml.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top