Maison  >  Article  >  Java  >  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
DDDoriginal
2024-10-30 13:22:02549parcourir

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>

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!

Déclaration:
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