Android: java.lang.IllegalStateException: у указанного потомка уже есть родитель. Сначала вы должны вызвать removeView() для родителя дочернего элемента.

Я создаю приложение для Android, в котором я динамически создаю строки таблицы, а затем динамически добавляю к нему изображения и текстовые представления. Он добавляет первую строку, а затем дает следующее исключение

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));

}

Может ли кто-нибудь сказать мне, как решить эту проблему.

Спасибо


person ekjyot    schedule 15.11.2011    source источник
comment
Где возникает это исключение?   -  person Jon Skeet    schedule 15.11.2011
comment
укажите позицию здесь... tr.addView(child); и не всегда одинаково.   -  person Noby    schedule 15.11.2011


Ответы (3)


Переменная iv, которую вы добавляете, не была создана внутри цикла, поэтому я предполагаю, что она создана раньше... но во втором цикле она добавляется в две разные строки таблицы.

person Jordi Coscolla    schedule 15.11.2011

tr.addView(iv,0);

Проблема с ImageView (iv), я думаю, поскольку он не создается внутри цикла, поэтому в первый раз он был добавлен в строку, а когда вы снова добавляете его в другую строку, это не разрешает, потому что представление может иметь только 1 родителя.

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

person Yashwanth Kumar    schedule 15.11.2011

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

инициализировать imageView iv перед tr.addView(iv,0);

ImageView in = new ImageView(ctx)
person Shailendra Singh Rajawat    schedule 15.11.2011