指定的子元素已经有父级了。

14

这是我的代码

if(c!=null) 
{           
    c.moveToFirst();
    String col = c.getString(2); //  
    check.setText(col);
    check.setVisibility(0);

    while(!c.isAfterLast()) 
    {
        String col1 = c.getString(1); 
        String col2 = c.getString(2);    
        String col3 = c.getString(3);

            while(!c.isAfterLast())
        {
            TextView que1 = new TextView(this);
            que1.setText(col1);
            lymn.addView(que1);

            if(col3.equals("Date"))
            {
                DatePicker dp = new DatePicker(this);
                lymn.addView(dp);
                break;
            }

            if(col3.equals("User Input"))
                    {
                EditText ed = new EditText(this);
                ed.setWidth(250);

                lymn.addView(ed);
                break;
            }

            if(col3.equals("YES/NO"))
            {
                yes1.setText("Yes");
                no1.setText("NO");

                rg1.addView(yes1);
                rg1.addView(no1); 
                lymn.addView(rg1);

                break;
            }

            if(col3.equals("High Average Low"))
            {
                High1.setText("High");
                Avg1.setText("Average");
                Low1.setText("Low"); 

                rg2.addView(High1);
                rg2.addView(Avg1);
                rg2.addView(Low1);

                lymn.addView(rg2);

                break;
            }

            if(col3.equals("Excellent Good Average Poor"))
            {
                exce1.setText("Excellent");
                good1.setText("Good");
                avg11.setText("Average"); 
                poor1.setText("Poor");

                rg3.addView(exce1);
                rg3.addView(good1);
                rg3.addView(avg11);
                rg3.addView(poor1);

                lymn.addView(rg3);

                break;
            }
            break;     
        }

        c.moveToNext(); 
    }
}

当我运行这段代码时,我得到了以下错误

09-06 11:34:37.777: WARN/Exception(27814): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
09-06 11:34:37.777: WARN/Exception(27814):     at android.view.ViewGroup.addViewInner(ViewGroup.java:1970) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.view.ViewGroup.addView(ViewGroup.java:1865) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.view.ViewGroup.addView(ViewGroup.java:1822) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.view.ViewGroup.addView(ViewGroup.java:1802) 
09-06 11:34:37.777: WARN/Exception(27814):     at com.ezee.app.user1.LoadCheckIn(user1.java:256) 
09-06 11:34:37.777: WARN/Exception(27814):     at com.ezee.app.user1.onCreate(user1.java:61) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.os.Handler.dispatchMessage(Handler.java:99) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.os.Looper.loop(Looper.java:123) 
09-06 11:34:37.777: WARN/Exception(27814):     at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-06 11:34:37.777: WARN/Exception(27814):     at java.lang.reflect.Method.invokeNative(Native Method) 
09-06 11:34:37.777: WARN/Exception(27814):     at java.lang.reflect.Method.invoke(Method.java:521) 
09-06 11:34:37.777: WARN/Exception(27814):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-06 11:34:37.777: WARN/Exception(27814):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-06 11:34:37.777: WARN/Exception(27814):     at dalvik.system.NativeStart.main(Native Method)

求助!请帮我解决这个问题。

2个回答

43

你得到的错误很难找到,因为你的代码很混乱,但这个错误意味着你正在添加一个已经在屏幕上(有父级)的 View (子项)。

这可能出现在任何地方,在这篇文章中很难确定,但例如:

这个可能有效:

  EditText ed = new EditText(this);
  ed.setWidth(250);
  lymn.addView(ed);

ed是新的,因此没有父级。

但我找不到yes1的声明,所以这个可能是罪魁祸首。或者是no1

  yes1.setText("Yes");
  no1.setText("NO");
  rg1.addView(yes1);
  rg1.addView(no1); 
  lymn.addView(rg1);

检查所有的addView调用。(提示:错误信息中有一行号,请使用它)

尝试在评论中回答问题,您必须遵循以下规则:

  • 不要重复添加任何视图。
  • 当一个视图已经被使用时(例如,您使用findViewById获取了它),不要再使用addView将其添加。
  • 当您想要添加一个视图时,请使用一个新视图来调用addView
  • 您可以将多个这些新视图添加到一个视图中,但不能多次添加该一个视图。
  • 您不能仅通过更改某些内容来重新使用视图。您可以重新使用变量,但如果您想要使用addView重新添加它,则需要创建一个新视图。

我再强调一下:使用错误中的行号找出哪一行产生了错误。查看您正在那里添加的内容,并尝试根据以上帮助找出为什么不起作用。


1
但是你看到我的代码,我有多个单选按钮。它们也有视图,那我该怎么办? - Piyush
1
我编写了以下程序相关内容:在上述第一个if条件语句中,我创建了一个名为rg1的RadioGroup对象,并实例化了两个RadioButton对象yes1和no1。 - Piyush
1
尝试回答这个问题,但是你的问题不太清楚。你应该能够通过一些帮助弄清楚它。 - Nanne
1
请注意:我只是以是/否为例,可能是您正在添加另一个视图=>检查错误的行号! - Nanne
但这个错误意味着您正在添加已经在屏幕上(具有父级)的视图(子级)。谢谢,这就是问题所在。 - Muhammad Babar

4
这意味着您正在添加一个没有父级的视图,如:

如果您将两个按钮添加到LinearLayout中,而将这些按钮添加到其他视图中,则会出现此异常。您必须添加 LinearLayout(根父级)而不是它的子元素


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接