Android: java.lang.IllegalStateException: указанный дочерний элемент уже имеет родителя. Сначала вы должны вызвать removeView () у родителя ребенка. - PullRequest
1 голос
/ 15 ноября 2011

Я создаю приложение для 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));

}

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

THAnks

Ответы [ 3 ]

6 голосов
/ 15 ноября 2011

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

5 голосов
/ 15 ноября 2011
tr.addView(iv,0);

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

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

1 голос
/ 15 ноября 2011

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

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

ImageView in = new ImageView(ctx)
...