Android:java.lang.IllegalStateException:指定的子级已有父级。您必须首先在孩子的父母上调用removeView()。

时间:2011-11-15 07:27:54

标签: android tablelayout

我正在制作一个Android应用程序,我在其中动态制作表格行,然后动态添加图像视图和textview。 它添加了第一行,然后给出以下异常

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

我正在使用以下代码:

          ar1= new JSONArray(children.toString());
                                for(int mn=0;mn<ar1.length();mn++){
                                    value=ar1.getString(mn);
    TableRow tr = new TableRow(HomePageWithPhoneIsOfflineDialog.this);
                                    tr.setBackgroundColor(Color.WHITE);
                                    tr.setId(100+mn);
                                    tr.setMinimumHeight(60);
                                    tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
                                    TextView child= new TextView(HomePageWithPhoneIsOfflineDialog.this);
                                    child.setId(200+mn);
                                    child.setHeight(50);
                                    child.setGravity(Gravity.CENTER);
                                    child.setTextColor(Color.BLACK);
                                    System.out.println(value);
                                    child.setText(value);
                                    System.out.println("adding iv");
                                    tr.addView(iv,0);
                                    System.out.println("adding child");
                                    tr.addView(child);
                                    System.out.println("adding table row");
                                     table.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

}

有谁能告诉我如何解决这个问题。

感谢

3 个答案:

答案 0 :(得分:6)

你要添加的iv变量不是在循环中创建的,所以我想在之前创建...但是在第二个循环中它被添加到两个不同的Table Rows。

答案 1 :(得分:5)

tr.addView(iv,0);

问题在于ImageView(iv),我想,因为它没有在循环中实例化,所以第一次将它添加到一行,当你再次将它添加到另一行时,它不会不允许,因为一个视图只能有一个父节点。

因此我建议您在每次循环时创建一个新的ImageView。

答案 2 :(得分:1)

因为您在每次迭代中添加了具有新值的相同View。

在tr.addView(iv,0)之前初始化imageView iv;

ImageView in = new ImageView(ctx)