Fehlerbehebung bei Android-Fehler: „Das angegebene Kind hat bereits ein Elternteil“
Beim häufigen Wechseln zwischen Layouts kann der Fehler „Das Das angegebene Kind hat bereits ein Elternteil. Sie müssen zuerst „removeView()“ auf dem Elternteil des Kindes aufrufen (Android). Dies tritt auf, wenn eine Ansicht, z. B. eine TextView oder EditText, zu einem Layout hinzugefügt wird, das bereits an die Inhaltsansicht der Anwendung angehängt wurde.
Bedenken Sie beispielsweise den folgenden Code, in dem ein Layout erstellt und häufig gewechselt wird :
<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>
Das Problem tritt auf, wenn die Methode setContentView() zweimal mit unterschiedlichen Layouts aufgerufen wird. Beim ersten Mal gibt es kein Problem, da das LinearLayout-Layout zum ersten Mal zur Inhaltsansicht hinzugefügt wird. Bei nachfolgenden Aufrufen von setContentView() enthält das LinearLayout-Layout jedoch weiterhin seine untergeordneten Elemente (TextView und EditText). Da das LinearLayout-Objekt bereits über ein übergeordnetes Objekt (die Inhaltsansicht) verfügt, wird beim erneuten Hinzufügen der Fehler „Das angegebene untergeordnete Objekt verfügt bereits über ein übergeordnetes Objekt“ ausgegeben.
Lösung:
Die Lösung besteht darin, die untergeordneten Elemente (TextView und EditText) aus dem LinearLayout-Layout zu entfernen, bevor Sie es ein zweites Mal zur Inhaltsansicht hinzufügen. Hier ist der geänderte Code:
<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>
Indem Sie die untergeordneten Elemente von ihrem vorherigen übergeordneten Element entfernen, bevor Sie sie dem neuen LinearLayout-Layout hinzufügen, stellen Sie sicher, dass sie nicht gleichzeitig an mehrere übergeordnete Elemente angehängt sind, und lösen so das Problem „Das angegebene untergeordnete Element bereits“ auf hat einen übergeordneten Fehler.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Android die Fehlermeldung „Das angegebene Kind hat bereits ein Elternteil“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!