指定的孩子已经有一个父。你必须先调用removeView()对孩子的父 [英] The specified child already has a parent. You must call removeView() on the child's parent first

查看:167
本文介绍了指定的孩子已经有一个父。你必须先调用removeView()对孩子的父的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了这个职位,因为我在这个新的,我需要一些帮助。我做点运动有关的应用程序,你是把你的名字,并返回你好(你把这个名字)。但之后,我按下按钮,我得到的错误指定的孩子已经有一个家长,你必须先调用removeView()孩子的家长

MainActivity.java

包com.example.holaamigos; 进口android.os.Bundle; 进口android.app.Activity; 进口android.content.Intent; 进口android.view *。 进口android.view.View.OnClickListener; 进口android.widget.Button; 进口android.widget.EditText; 公共类MainActivity延伸活动{     公共最后静态字符串EXTRA_SALUDO =com.example.holaamigos.SALUDO;     @覆盖     保护无效的onCreate(包savedInstanceState){         super.onCreate(savedInstanceState);         的setContentView(R.layout.activity_main);         最后的EditText txtNombre =(EditText上)findViewById(R.id.TxtNombre);         最终按钮btnHola =(按钮)findViewById(R.id.BtnHola);             btnHola.setOnClickListener(新OnClickListener(){                 @覆盖                 公共无效的onClick(视图v){                     意向意图=新的意图(MainActivity.this,ActivitySaludo.class);                     。字符串saludo = txtNombre.getText()的toString();                     intent.putExtra(EXTRA_SALUDO,saludo);                     startActivity(意向);         }     });     }     @覆盖     公共布尔onCreateOptionsMenu(功能菜单){         //充气菜单;这增加了项目操作栏,如果它是present。         。getMenuInflater()膨胀(R.menu.main,菜单);         返回true;     } }

ActivitySaludo.java

包com.example.holaamigos; 进口android.app.Activity; 进口android.content.Intent; 进口android.os.Bundle; 进口android.widget.TextView; 公共类ActivitySaludo延伸活动{     @覆盖     公共无效的onCreate(包savedInstanceState){         super.onCreate(savedInstanceState);         的setContentView(R.layout.activity_saludo);         意向意图= getIntent();         字符串saludo = intent.getStringExtra(MainActivity.EXTRA_SALUDO);         // TextView的TXT =新的TextView(本);         //txt.setText(20);         //txt.setText(saludo);         TextView的txtCambiado =(TextView中)findViewById(R.id.TxtSaludo);         txtCambiado.setText(saludo);         的setContentView(txtCambiado);     } }

activity_saludo.xml

< XML版本=1.0编码=UTF-8&GT?; < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android     机器人:layout_width =match_parent     机器人:layout_height =match_parent     机器人:方向=垂直>     <的TextView         机器人:ID =@ + ID / TxtSaludo         机器人:layout_width =WRAP_CONTENT         机器人:layout_height =WRAP_CONTENT         机器人:文本=/> < / LinearLayout中>

activity_main.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID / LinearLayout1
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>

    <的TextView
        机器人:ID =@ + ID / LblNombre
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文本=@字符串/ NOMBRE/>

    <的EditText
        机器人:ID =@ + ID / TxtNombre
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:inputType =文本/>

    <按钮
        机器人:ID =@ + ID / BtnHola
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文本=@字符串/ hola_apy
        机器人:的onClick =enviarSaludo/>

< / LinearLayout中>
 

LogCat中

10-10 16:12:18.470:D / AndroidRuntime(810):关闭虚拟机 10-10 16:12:18.470:W / dalvikvm(810):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40a71930) 10-10 16:12:18.586:E / AndroidRuntime(810):致命异常:主要 10-10 16:12:18.586:E / AndroidRuntime(810):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.example.holaamigos / com.example.holaamigos.ActivitySaludo}:java.lang.IllegalStateException:本指定的孩子已经有一个父。你必须先调用removeView()对孩子的家长。 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.ActivityThread.access $ 600(ActivityThread.java:141) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.os.Handler.dispatchMessage(Handler.java:99) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.os.Looper.loop(Looper.java:137) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.ActivityThread.main(ActivityThread.java:5041) 10-10 16:12:18.586:E / AndroidRuntime(810):在java.lang.reflect.Method.invokeNative(本机方法) 10-10 16:12:18.586:E / AndroidRuntime(810):在java.lang.reflect.Method.invoke(Method.java:511) 10-10 16:12:18.586:E / AndroidRuntime(810):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 10-10 16:12:18.586:E / AndroidRuntime(810):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 10-10 16:12:18.586:E / AndroidRuntime(810):在dalvik.system.NativeStart.main(本机方法) 10-10 16:12:18.586:E / AndroidRuntime(810):java.lang.IllegalStateException:产生的原因指定的孩子已经有一个父。你必须先调用removeView()对孩子的家长。 10-10 16:12:18.586:E / AndroidRuntime(810):在android.view.ViewGroup.addViewInner(ViewGroup.java:3339) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.view.ViewGroup.addView(ViewGroup.java:3210) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.view.ViewGroup.addView(ViewGroup.java:3186) 10-10 16:12:18.586:E / AndroidRuntime(810):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:289) 10-10 16:12:18.586:E / AndroidRuntime(810):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:279) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.Activity.setContentView(Activity.java:1901) 10-10 16:12:18.586:E / AndroidRuntime(810):在com.example.holaamigos.ActivitySaludo.onCreate(ActivitySaludo.java:25) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.Activity.performCreate(Activity.java:5104) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 10-10 16:12:18.586:E / AndroidRuntime(810):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 10-10 16:12:18.586:E / AndroidRuntime(810):11 ...更多 10-10 16:12:18.856:D / dalvikvm(810):GC_CONCURRENT释放134K,10%的可用2630K / 2908K,暂停73ms + 83ms,总237ms

解决方案

每当我省略了一个参数,而膨胀的视图中的片段我遇到这个错误的 onCreateView()像这样的方法:

 公开查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
    查看查看= inflater.inflate(R.layout.fragment_reject,集装箱);
    返回查看;
}
 

的解决方案是将视图充气管线更改为:

查看视图= inflater.inflate(R.layout.fragment_reject,集装箱,假);

的解释,可在为碎片 Android的指南中找到

从引导引用,在视图初始化语句中的最后一个参数是假的,因为:

  

系统已插入膨胀的布局放入容器中传递真会在最后的布局创建一个冗余的视图组

I create this post, because i am new at this, and i need a little help. I am doing a little exercise about a application you that put your name, and it returns "hello (the name you put)". But after i push the button i get the error "The specified child already has a parent. You must call removeView() on the child's parent first"

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

解决方案

I encountered this error whenever I omitted a parameter while inflating the view for a fragment in the onCreateView() method like so:

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

The solution is to change the view inflation line to:

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

The explanation can be found at the Android guide for fragments

Quoting from the guide, the final parameter in the view initialization statement is false because:

"the system is already inserting the inflated layout into the container—passing true would create a redundant view group in the final layout"

这篇关于指定的孩子已经有一个父。你必须先调用removeView()对孩子的父的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆