2011-11-15 72 views
1

我正在創建一個android應用程序,在這個應用程序中,我正在動態創建表格行,然後動態地向其添加圖像視圖和文字視圖。 它增加了第一排,然後給下面的異常Android:java.lang.IllegalStateException:指定的子項已經有父項。您必須先調用子對象的父對象的removeView()。

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

}

誰能告訴我怎麼解決這個問題。

感謝

+0

*哪裏*會拋出異常? –

+0

在這裏指定位置... tr.addView(child);而且總是不一樣。 – Noby

回答

6

您要添加的IV變量,不被循環,所以我想象的是之前創建內部創建......但在第二循環中它添加到兩個不同的錶行。

5
tr.addView(iv,0); 

問題是與ImageView(IV),我想,因爲它不是在循環中實例化,因此第一次被添加到行,當你再次將其添加到另一行,它不允許,因爲一個視圖只能有一個父項。

所以我建議你爲每次循環創建一個新的ImageView。

1

因爲您在每次迭代中添加了具有新值的相同視圖。

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

ImageView in = new ImageView(ctx) 
相關問題