Android:java.lang.IllegalStateException:指定的子级已具有父级。必须对子对象&x27;调用removeView();她先是父母。
我正在制作一个android应用程序,在其中动态生成表行,然后动态添加ImageView和TextView。 它添加第一行,然后给出以下异常Android:java.lang.IllegalStateException:指定的子级已具有父级。必须对子对象&x27;调用removeView();她先是父母。,android,tablelayout,Android,Tablelayout,我正在制作一个android应用程序,在其中动态生成表行,然后动态添加ImageView和TextView。 它添加第一行,然后给出以下异常 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 我正在使用以下代码: ar1= new JSONArray(childre
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));
ar1=newjsonarray(children.toString());
对于(int mn=0;mn
问题在于ImageView
(iv),我认为,因为它没有在循环中实例化,所以第一次将它添加到一行,当您再次将它添加到另一行时,它是不允许的,因为一个视图只能有一个父视图
因此,我建议您在每次循环时创建一个新的ImageView
问题在于ImageView
(iv),我认为,因为它没有在循环中实例化,所以第一次将它添加到一行,当您再次将它添加到另一行时,它是不允许的,因为一个视图只能有一个父视图
因此,我建议您在每次循环时创建一个新的ImageView。因为您在每次迭代中都添加了具有新值的相同视图
初始化imageView iv,在tr.addView(iv,0)之前
因为您在每次迭代中都添加了具有新值的相同视图
初始化imageView iv,在tr.addView(iv,0)之前
您正在添加的iv变量不是在循环内创建的,所以我想象它是在之前创建的……但是在第二个循环中,它被添加到两个不同的表行。您正在添加的iv变量不是在循环内创建的,所以我想象它是在之前创建的……但是在第二个循环中,它被添加到两个不同的表行 它在哪里引发异常?在这里指定位置…tr.addView(child);并且不总是相同的。它在哪里引发异常?在这里指定位置…tr.addView(child);并且不总是相同的。
tr.addView(iv,0);
ImageView in = new ImageView(ctx)