Maison > Java > javaDidacticiel > Pourquoi est-ce que j'obtiens l'erreur « L'enfant spécifié a déjà un parent » dans Android ?

Pourquoi est-ce que j'obtiens l'erreur « L'enfant spécifié a déjà un parent » dans Android ?

DDD
Libérer: 2024-10-30 13:22:02
original
692 Les gens l'ont consulté

Why Am I Getting the

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>
Copier après la connexion

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>
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal