IllegalStateException lors de l'ajout d'une vue d'une TableRow sur Android
-
27-10-2019 - |
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?
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.