it-swarm.com.ru

У указанного ребенка уже есть родитель. Вы должны сначала вызвать removeView () у родителя ребенка

Я создаю этот пост, потому что я новичок в этом, и мне нужна небольшая помощь. Я делаю небольшое упражнение по поводу приложения, которое вы указали в качестве имени, и оно возвращает «привет (имя, которое вы указали)». Но после того, как я нажимаю кнопку, я получаю сообщение об ошибке «У указанного потомка уже есть родитель. Сначала необходимо вызвать removeView () для родителя ребенка»

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

Я сталкивался с этой ошибкой всякий раз, когда пропускал параметр во время надувания представления фрагмента в методе onCreateView(), например так:

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

Решение состоит в том, чтобы изменить линию инфляции представления на:

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

Объяснение можно найти в руководство по Android для фрагментов

Цитируя из руководства, последний параметр в операторе инициализации представления является ложным, потому что: 

«Система уже вставляет раздутый макет в контейнер - передача true создаст избыточную группу представлений в окончательном макете»

121
Price

В onCreate с активностью или onCreateView с фрагментом

 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

в ActivitySaludo, эта строка,

    setContentView(txtCambiado);

вы должны установить представление содержимого для действия только один раз.

19
Jeffrey Blattman

Вам не нужна эта строка: setContentView(txtCambiado);

10
Danilo Silva

В моем случае я случайно возвращал дочернее представление из Layout.onCreateView(), как показано ниже:

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
}

Решением было вернуть родительское представление вместо дочернего.

3
Sam

В моем случае проблема была в том, что я пытался добавить один и тот же вид несколько раз в линейный макет. 

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

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

     parentLayout.addView(childView);

 }

просто инициализируйте представление каждый раз, чтобы решить проблему

 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

если вы добавляете один и тот же вид несколько раз в цикл for .. если это так, попробуйте создать объект View макета внутри цикла for. и добавить вид в сторону цикла for 

Чтобы избежать таких проблем 

1
Peter

Попробуйте так, надеюсь, это поможет вам решить вашу проблему.

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

Вам просто нужно инициализировать ваше представление в методе onCreate (), а затем снова в onCreateDialog () перед setView (), и это должно работать!

0
Spinner

frameLayout.addView (yourView); <----- если вы получаете ошибку в этой строке, сначала удалите представление из родительского элемента

if (yourView.getParent ()! = null)

((ViewGroup) yourView.getParent ()). RemoveView (yourView); FrameLayout.addView (yourView); (Добавить вид в макет)

0
Krishna sheladiya

Я столкнулся с этой ошибкой, когда в макете xml активности есть невидимое представление. В то время он не использовался в моем случае, поэтому я удалил его, и аварии больше не видно.

0
Mehmet Yalçın Delioğlu