Dépannage de l'erreur Android : "L'enfant spécifié a déjà un parent"
Lorsque vous passez fréquemment d'une mise en page à l'autre, vous pouvez rencontrer l'erreur "Le L'enfant spécifié a déjà un parent. Vous devez d'abord appeler RemoveView() sur le parent de l'enfant (Android)." Cela se produit lorsqu'une vue, telle qu'un TextView ou EditText, est ajoutée à une mise en page qui a déjà été attachée à la vue de contenu de l'application.
Par exemple, considérons le code suivant dans lequel une mise en page est créée et changée fréquemment. :
<code class="java">private void ConsoleWindow() { runOnUiThread(new Runnable() { @Override public void run() { // Create a new layout (LinearLayout). LinearLayout layout = new LinearLayout(getApplicationContext()); layout.setOrientation(LinearLayout.VERTICAL); // Add a TextView to the layout. layout.addView(tv); // Add an EditText to the layout. et.setHint("Enter Command"); layout.addView(et); // Set the content view to the new layout. setContentView(layout); } }); }</code>
Le problème survient lorsque la méthode setContentView() est appelée deux fois avec des mises en page différentes. La première fois, il n'y a aucun problème car la mise en page LinearLayout est ajoutée à la vue de contenu pour la première fois. Cependant, lors des appels ultérieurs à setContentView(), la mise en page LinearLayout contient toujours ses enfants (TextView et EditText). Comme l'objet LinearLayout a déjà un parent (la vue du contenu), son ajout à nouveau renvoie l'erreur « L'enfant spécifié a déjà un parent ».
Solution :
La solution consiste à supprimer les enfants (TextView et EditText) de la mise en page LinearLayout avant de l'ajouter une seconde fois à la vue du contenu. Voici le code modifié :
<code class="java">private void ConsoleWindow() { runOnUiThread(new Runnable() { @Override public void run() { // Create a new layout (LinearLayout). LinearLayout layout = new LinearLayout(getApplicationContext()); layout.setOrientation(LinearLayout.VERTICAL); // Remove the TextView from its parent (if it has one). if (tv.getParent() != null) { ((ViewGroup) tv.getParent()).removeView(tv); } // Add the TextView to the layout. layout.addView(tv); // Remove the EditText from its parent (if it has one). if (et.getParent() != null) { ((ViewGroup) et.getParent()).removeView(et); } // Add the EditText to the layout. et.setHint("Enter Command"); layout.addView(et); // Set the content view to the new layout. setContentView(layout); } }); }</code>
En supprimant les enfants de leur parent précédent avant de les ajouter à la nouvelle mise en page LinearLayout, vous vous assurez qu'ils ne sont pas attachés à plusieurs parents simultanément, en résolvant le problème "L'enfant spécifié déjà a une erreur "parent".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!