Je dois souvent basculer entre deux mises en page. L'erreur se produit dans la mise en page publiée ci-dessous.
Lorsque ma mise en page est appelée la première fois, il ne se produit aucune erreur et tout va bien. Lorsque j'appelle ensuite une mise en page différente (une mise en page vide) et que j'appelle ensuite ma mise en page une deuxième fois, cela génère l'erreur suivante:
> FATAL EXCEPTION: main
> java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Mon code de mise en page ressemble à ceci:
tv = new TextView(getApplicationContext()); // are initialized somewhere else
et = new EditText(getApplicationContext()); // in the code
private void ConsoleWindow(){
runOnUiThread(new Runnable(){
@Override
public void run(){
// MY LAYOUT:
setContentView(R.layout.activity_console);
// LINEAR LAYOUT
LinearLayout layout=new LinearLayout(getApplicationContext());
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
// TEXTVIEW
layout.addView(tv); // <========== ERROR IN THIS LINE DURING 2ND RUN
// EDITTEXT
et.setHint("Enter Command");
layout.addView(et);
}
}
}
Je sais que cette question a déjà été posée, mais cela n'a pas aidé dans mon cas.
java
android
android-edittext
textview
parent-child
blackst0ne
la source
la source
LinearLayout
mais vous ajoutezTextView
. Alors réparez-le.TranstitionManager.beginDelayedTransition
, veuillez vérifier ma réponse iciRéponses:
Le message d'erreur indique ce que vous devez faire.
la source
passez simplement l'argument attachtoroot comme faux
la source
attachToRoot
= false, est la voie à suivre.Je suis venu ici en recherchant l'erreur avec mon recyclerview mais la solution n'a pas fonctionné (évidemment). J'ai écrit la cause et la solution en cas de recyclage. J'espère que ça aide quelqu'un.
L'erreur est causée si
onCreateViewHolder()
la méthode suivante est suivie:Au lieu de cela, il devrait être
la source
J'ai reçu ce message en essayant de valider un fragment en utilisant attach to root sur true au lieu de false, comme ceci:
Après avoir fait:
Ça a marché.
la source
Si une autre solution ne fonctionne pas comme:
vérifier ce que vous retournez de onCreateView du fragment est-ce une vue unique ou un groupe de vues? dans mon cas, j'avais viewpager sur la racine du xml du fragment et je retournais viewpager, quand j'ai ajouté viewgroup dans la mise en page je n'ai pas mis à jour que je dois retourner viewgroup maintenant, pas viewpager (view).
la source
frameLayout.addView (bannerAdView); <----- si vous obtenez une erreur sur cette ligne, procédez comme suit.
la source
Mon erreur a été de définir la vue comme ceci:
Il manquait:
la source
Dans mon cas, le problème était dû au fait que je gonflais la vue parent avec la
<merge>
mise en page. Dans ce cas, aaddView()
causé le crash.La suppression a
addView()
aidé à résoudre le problème.la source
vérifiez si vous avez déjà ajouté la vue
la source
Le code ci-dessous l'a résolu pour moi:
Remarque: L'erreur provenait de ma classe de fragment et en remplaçant la méthode onDestroy comme celle-ci, j'ai pu la résoudre.
la source
la source
Dans mon cas, cela se produit lorsque je veux ajouter une vue par parent à une autre vue
vous devez ajouter une vue parent comme celle-ci
la source
Vous devez d'abord supprimer la vue enfant de son parent.
Si votre projet est en Kotlin, votre solution sera légèrement différente de Java. Kotlin simplifie la conversion avec
as?
, en retournant null si le côté gauche est nul ou si la conversion échoue.Solution d'extension Kotlin
Si vous devez le faire plusieurs fois, ajoutez cette extension pour rendre votre code plus lisible.
Il ne fera rien en toute sécurité si cette vue est nulle, la vue parente est nulle ou la vue parente n'est pas un groupe de vues
la source
J'ai trouvé une autre solution:
Ici, j'ai juste une instruction if pour vérifier si la vue avait un parent et si ce n'était pas le cas Créez la nouvelle boîte de dialogue, définissez le contentView et affichez la boîte de dialogue dans ma méthode "createAlgorithmDialog ()".
Cela définit également les boutons positifs et négatifs (boutons OK et Annuler) avec onClickListeners.
la source
Vous pouvez utiliser cette méthode pour vérifier si une vue a des enfants ou non.
la source
Mon cas était différent, la vue enfant avait déjà une vue parent. J'ajoute la vue enfant à l'intérieur de la vue parent à un parent différent. exemple de code ci-dessous
Et j'ai gonflé cette vue et ajouté à un autre LinearLayout, puis j'ai supprimé le LinaarLayout de la disposition ci-dessus et il a commencé à fonctionner
le code ci-dessous a résolu le problème:
la source
Mon problème est lié à de nombreuses autres réponses, mais une raison un peu différente pour avoir besoin de faire le changement ... J'essayais de convertir une activité en fragment. J'ai donc déplacé le code gonfler de onCreate vers onCreateView, mais j'ai oublié de convertir de setContentView à la méthode inflate, et la même exception IllegalStateException m'a amené à cette page.
J'ai changé ceci:
pour ça:
Cela a résolu le problème.
la source