In meiner App muss ich häufig zwischen zwei Layouts wechseln. Der Fehler tritt im unten angegebenen Layout auf.Das angegebene Kind hat bereits einen Elternteil. Sie müssen zuerst removeView() auf dem übergeordneten Element des Kindes aufrufen (Android)
Wenn mein Layout das erste Mal aufgerufen wird, tritt kein Fehler auf und alles ist in Ordnung. Wenn ich rufe dann ein anderes Layout (eine leere) und danach ein zweites Mal mein Layout nennen, gibt es mir die folgende Fehlermeldung:
> 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 wie folgt aussieht:
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 es nicht geholfen.
Manchmal zufällige Antworten, die auf die gestellten Fragen helfen nicht genau die Antworten sind jemand anderes. Das hat für mich funktioniert. Vielen Dank! –
Nice !, und deshalb sollten die Leute meistens "Null" als 2d Parameter in Inflaters übergeben. Vielen Dank. – superUser
Null an den Parameter übergeben, der für den Elternteil verantwortlich ist, ist keine schlechte Idee, aber Sie müssen wissen, dass in diesem Fall die Kindansicht (die, die Sie aufblasen) in einigen Fällen nicht in der Lage ist, es selbst korrekt zu messen, weil es tut nichts über die Eltern wissen. In einigen Fällen wird es funktionieren, in einigen Fällen nicht. – Sniper