wake-up-neo.com

Das angegebene Kind hat bereits ein Elternteil. Sie müssen removeView () zuerst beim übergeordneten Element des Kindes aufrufen

Ich erstelle diesen Beitrag, weil ich neu bei diesem Thema bin und ein wenig Hilfe brauche. Ich mache eine kleine Übung über eine Anwendung, die Sie mit Ihrem Namen eingeben, und es wird "Hallo (der Name, den Sie setzen)" zurückgegeben. Aber nach dem Drücken der Taste erhalte ich die Fehlermeldung "Das angegebene Kind hat bereits einen Elternteil. Sie müssen removeView () zuerst beim Elternteil des Kindes aufrufen."

MainActivity.Java

package com.example.holaamigos;

import Android.os.Bundle;
import Android.app.Activity;
import Android.content.Intent;
import Android.view.*;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.EditText;

public class MainActivity extends Activity {
    public final static String EXTRA_SALUDO = "com.example.holaamigos.SALUDO";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
        final Button btnHola = (Button)findViewById(R.id.BtnHola);

            btnHola.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, ActivitySaludo.class);
                    String saludo = txtNombre.getText().toString();
                    intent.putExtra(EXTRA_SALUDO, saludo);
                    startActivity(intent);
        }

    });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

ActivitySaludo.Java

package com.example.holaamigos;


import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;
import Android.widget.TextView;

public class ActivitySaludo extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_saludo);

        Intent intent = getIntent();
        String saludo = intent.getStringExtra(MainActivity.EXTRA_SALUDO);

        //TextView txt = new TextView(this);
        //txt.setText(20);
        //txt.setText(saludo);

        TextView txtCambiado = (TextView) findViewById(R.id.TxtSaludo);
        txtCambiado.setText(saludo);
        setContentView(txtCambiado);
    }

}

activity_saludo.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <TextView 
        Android:id="@+id/TxtSaludo"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="" />


</LinearLayout>

activity_main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/LinearLayout1"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/LblNombre"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/nombre" />

    <EditText
        Android:id="@+id/TxtNombre"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:inputType="text" />

    <Button 
        Android:id="@+id/BtnHola"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/hola_apy"
        Android:onClick="enviarSaludo"/>

</LinearLayout>

LogCat

10-10 16:12:18.470: D/AndroidRuntime(810): Shutting down VM
10-10 16:12:18.470: W/dalvikvm(810): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
10-10 16:12:18.586: E/AndroidRuntime(810): FATAL EXCEPTION: main
10-10 16:12:18.586: E/AndroidRuntime(810): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.holaamigos/com.example.holaamigos.ActivitySaludo}: Java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2180)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.os.Handler.dispatchMessage(Handler.Java:99)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.os.Looper.loop(Looper.Java:137)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.ActivityThread.main(ActivityThread.Java:5041)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Java.lang.reflect.Method.invokeNative(Native Method)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Java.lang.reflect.Method.invoke(Method.Java:511)
10-10 16:12:18.586: E/AndroidRuntime(810):  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
10-10 16:12:18.586: E/AndroidRuntime(810):  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
10-10 16:12:18.586: E/AndroidRuntime(810):  at dalvik.system.NativeStart.main(Native Method)
10-10 16:12:18.586: E/AndroidRuntime(810): Caused by: Java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.view.ViewGroup.addViewInner(ViewGroup.Java:3339)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.view.ViewGroup.addView(ViewGroup.Java:3210)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.view.ViewGroup.addView(ViewGroup.Java:3186)
10-10 16:12:18.586: E/AndroidRuntime(810):  at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:289)
10-10 16:12:18.586: E/AndroidRuntime(810):  at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:279)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.Activity.setContentView(Activity.Java:1901)
10-10 16:12:18.586: E/AndroidRuntime(810):  at com.example.holaamigos.ActivitySaludo.onCreate(ActivitySaludo.Java:25)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.Activity.performCreate(Activity.Java:5104)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
10-10 16:12:18.586: E/AndroidRuntime(810):  at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2144)
10-10 16:12:18.586: E/AndroidRuntime(810):  ... 11 more
10-10 16:12:18.856: D/dalvikvm(810): GC_CONCURRENT freed 134K, 10% free 2630K/2908K, paused 73ms+83ms, total 237ms
49
Javier Coronel

Ich bin auf diesen Fehler gestoßen, wenn ich einen Parameter weggelassen habe, während ich die Ansicht für ein Fragment in der onCreateView() -Methode wie folgt aufgeblasen habe:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_reject, container);
    return view;
}

Die Lösung besteht darin, die Ansicht Inflationslinie zu ändern:

View view=inflater.inflate(R.layout.fragment_reject, container,false);

Die Erklärung finden Sie im Android-Handbuch für Fragmente

Aus dem Handbuch zitiert, ist der letzte Parameter in der Anweisung zur Ansichtsinitialisierung aus folgenden Gründen falsch:

"Das System fügt das aufgeblasene Layout bereits in den Container ein. Wenn Sie true übergeben, wird im endgültigen Layout eine redundante Ansichtsgruppe erstellt."

123
Price

In onCreate mit Aktivität oder onCreateView mit Fragment

 if (view != null) {
    ViewGroup parent = (ViewGroup) view.getParent();
    if (parent != null) {
        parent.removeView(view);
    }
}
try {
    view = inflater.inflate(R.layout.fragment_main, container, false);
} catch (InflateException e) {

}
24
Cabezas

in ActivitySaludo diese Zeile,

    setContentView(txtCambiado);

sie müssen die Inhaltsansicht für die Aktivität nur einmal festlegen.

19

Sie brauchen diese Zeile nicht: setContentView(txtCambiado);

10
Danilo Silva

In meinem Fall habe ich versehentlich eine untergeordnete Ansicht aus Layout.onCreateView() zurückgegeben, wie unten gezeigt:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_reject, container, false);

    Button button = view.findViewById(R.id.some_button);

    return button; // <-- Problem is this
}

Die Lösung bestand darin, die übergeordnete Ansicht anstelle der untergeordneten Ansicht zurückzugeben.

3
Sam

In meinem Fall bestand das Problem darin, dass ich versuchte, dieselbe Ansicht mehrmals dem linearen Layout hinzuzufügen 

View childView = LayoutInflater.from(context).inflate(R.layout.lay_progressheader, parentLayout,false);

 for (int i = 1; i <= totalCount; i++) {

     parentLayout.addView(childView);

 }

initialisieren Sie einfach jedes Mal die Ansicht, um das Problem zu beheben

 for (int i = 1; i <= totalCount; i++) {

     View childView = LayoutInflater.from(context).inflate(R.layout.lay_progressheader, parentLayout,false);

      parentLayout.addView(childView);

 }
1
Manohar Reddy

wenn Sie dieselbe Ansicht wiederholt in einer for-Schleife hinzufügen. Wenn dies der Fall ist, erstellen Sie das View-Objekt des Layouts in der for-Schleife. und fügen Sie die Ansicht in die for-Schleife ein 

Um solche Probleme zu vermeiden 

1
Peter

Versuchen Sie es auf diese Weise, ich hoffe, das hilft Ihnen, Ihr Problem zu lösen.

TextView textView = new TextView(this);
textView.setText("CustomTextView");
addContentView(textView,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
1
Haresh Chhelana

Sie müssen nur Ihre Ansicht in der onCreate () - Methode und dann in onCreateDialog () erneut initialisieren, bevor setView () gesetzt ist.

0
Spinner

frameLayout.addView (yourView); <----- Wenn Sie in dieser Zeile einen Fehler erhalten, entfernen Sie zuerst die Ansicht von ihrem übergeordneten Element

if (yourView.getParent ()! = null)

((ViewGroup) yourView.getParent ()). RemoveView (yourView); FrameLayout.addView (yourView); (Ansicht zum Layout hinzufügen)

0

Dieser Fehler ist aufgetreten, während in einem XML-Aktivitätslayout eine unsichtbare Ansicht angezeigt wird. Zu diesem Zeitpunkt wurde es in meinem Fall nicht verwendet, also habe ich es entfernt und der Absturz ist nicht mehr zu sehen.