Ich muss häufig zwischen zwei Layouts wechseln. Der Fehler tritt im unten angegebenen Layout auf.
Wenn mein Layout zum ersten Mal aufgerufen wird, tritt kein Fehler auf und alles ist in Ordnung. Wenn ich dann ein anderes Layout (ein leeres) und anschließend ein zweites Mal mein Layout aufrufe, wird der folgende Fehler ausgegeben:
> FATAL EXCEPTION: main
> java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Mein Layout-Code sieht folgendermaßen aus:
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);
}
}
}
Ich weiß, dass diese Frage schon einmal gestellt wurde, aber in meinem Fall hat sie nicht geholfen.
java
android
android-edittext
textview
parent-child
blackst0ne
quelle
quelle
LinearLayout
aber Sie fügen hinzuTextView
. Also repariere es.TranstitionManager.beginDelayedTransition
, die verwenden , überprüfen Sie bitte meine Antwort hierAntworten:
Die Fehlermeldung sagt, was Sie tun sollten.
quelle
Übergeben Sie einfach das attachtoroot-Argument als falsch
quelle
attachToRoot
= falsch, ist der richtige Weg.Ich bin hierher gekommen, um den Fehler mit meinem Recyclerview zu suchen, aber die Lösung hat (offensichtlich) nicht funktioniert. Ich habe die Ursache und die Lösung für den Fall von recyclerview geschrieben. Hoffe es hilft jemandem.
Der Fehler wird verursacht, wenn
onCreateViewHolder()
die folgende Methode angewendet wird:Stattdessen sollte es sein
quelle
Ich habe diese Meldung erhalten, als ich versucht habe, ein Fragment mit attach to root auf true anstatt auf false zu übertragen:
Danach:
Es funktionierte.
quelle
Wenn eine andere Lösung nicht funktioniert wie:
Überprüfen Sie, ob Sie von onCreateView des Fragments zurückkehren. Ist es eine einzelne Ansicht oder eine Ansichtsgruppe? In meinem Fall hatte ich Viewpager im Stammverzeichnis von XML des Fragments und gab Viewpager zurück. Als ich Viewgroup im Layout hinzufügte, habe ich nicht aktualisiert, dass ich jetzt Viewgroup zurückgeben muss, nicht Viewpager (View).
quelle
frameLayout.addView (bannerAdView); <----- Wenn Sie in dieser Zeile einen Fehler erhalten, gehen Sie wie folgt vor.
quelle
Mein Fehler war, die Ansicht wie folgt zu definieren:
Es fehlte:
quelle
In meinem Fall wurde das Problem durch die Tatsache verursacht, dass ich die übergeordnete Ansicht mit
<merge>
Layout aufgeblasen habe. In diesem FalladdView()
verursachte der Absturz.Das Entfernen
addView()
half, das Problem zu lösen.quelle
Überprüfen Sie, ob Sie die Ansicht bereits hinzugefügt haben
quelle
Der folgende Code hat es für mich gelöst:
Hinweis: Der Fehler stammte aus meiner Fragmentklasse. Durch Überschreiben der onDestroy-Methode konnte ich ihn beheben.
quelle
quelle
In meinem Fall passiert es, wenn ich eine Ansicht des übergeordneten Elements zu einer anderen Ansicht hinzufügen möchte
Sie müssen eine übergeordnete Ansicht wie diese hinzufügen
quelle
Sie müssen zuerst die untergeordnete Ansicht aus der übergeordneten Ansicht entfernen.
Wenn sich Ihr Projekt in Kotlin befindet, sieht Ihre Lösung etwas anders aus als Java. Kotlin vereinfacht das Casting mit
as?
und gibt null zurück, wenn die linke Seite null ist oder das Casting fehlschlägt.Kotlin-Erweiterungslösung
Wenn Sie dies mehrmals tun müssen, fügen Sie diese Erweiterung hinzu, um Ihren Code besser lesbar zu machen.
Es wird sicher nichts tun, wenn diese Ansicht null ist, die übergeordnete Ansicht null ist oder die übergeordnete Ansicht keine ViewGroup ist
quelle
Ich habe eine andere Lösung gefunden:
Hier habe ich nur eine if-Anweisung, um zu überprüfen, ob die Ansicht ein übergeordnetes Element hatte und ob das neue Dialogfeld nicht erstellt wurde. Legen Sie die Inhaltsansicht fest und zeigen Sie das Dialogfeld in meiner Methode "createAlgorithmDialog ()" an.
Dadurch werden auch die positiven und negativen Schaltflächen (OK- und Abbrechen-Schaltflächen) mit onClickListeners eingerichtet.
quelle
Mit dieser Methode können Sie überprüfen, ob eine Ansicht untergeordnete Elemente enthält oder nicht.
quelle
Mein Fall war anders. Die untergeordnete Ansicht hatte bereits eine übergeordnete Ansicht. Ich füge die untergeordnete Ansicht in der übergeordneten Ansicht einem anderen übergeordneten Element hinzu. Beispielcode unten
Und ich habe diese Ansicht aufgeblasen und zu einem anderen LinearLayout hinzugefügt, dann habe ich das LinaarLayout aus dem obigen Layout entfernt und es hat angefangen zu funktionieren
Der folgende Code hat das Problem behoben:
quelle
Mein Problem hängt mit vielen anderen Antworten zusammen, aber ein etwas anderer Grund für die Notwendigkeit, die Änderung vorzunehmen ... Ich habe versucht, eine Aktivität in ein Fragment umzuwandeln. Also habe ich den Inflate-Code von onCreate nach onCreateView verschoben, aber ich habe vergessen, von setContentView in die Inflate-Methode zu konvertieren, und dieselbe IllegalStateException hat mich auf diese Seite gebracht.
Ich habe das geändert:
dazu:
Das hat das Problem gelöst.
quelle