2013-05-28 58 views
0

我想將我的查詢結果添加到表格佈局中的表格行。我不斷收到java.lang.IllegalStateException:指定的孩子已經有一個父母。您必須先調用子對象的父對象的removeView()。當我打電話時:從代碼中添加表格行到TableLayout(刪除父錯誤)

((ViewGroup)table.getParent()).removeView(table); 

我得到一個空指針錯誤。任何對此的幫助都會很大。這是完整的代碼。

runOnUiThread(new Runnable() { 


      public void run() { 


       TableLayout table = (TableLayout)findViewById(R.id.resultstable); 

       int count = response.getPropertyCount(); 
       System.out.println(count); 
       for(int i = 0; i < count; i++) 
       { 
        resultset.add(response.getProperty(i)); 
       } 

       //TextView tv = new TextView(this); 
       for(int j = 0; j < resultset.size(); j++) 
       { 
        //if(resultset.get(j).toString() == "resFName") 
        //{ 

         tv.setText(resultset.get(j).toString()); 
         //((ViewGroup)row.getParent()).removeView(row); 
         row.addView(tv); 
         //((ViewGroup)table.getParent()).removeView(table); 
         table.addView(row); 
        //} 


       } 
      } 
     }); 

回答

0

您每次都將相同的TextView對象添加到行中。在每次迭代中,創建一個新的TextView和一個TableRow。

對(INT J = 0;Ĵ< resultset.size(); J ++){

//if(resultset.get(j).toString() == "resFName") 
//{ 

TextView tv = new TextView(context); 

tv.setText(resultset.get(j).toString()); 
//((ViewGroup)row.getParent()).removeView(row); 

TableRow row = new TableRow(context); 

row.addView(tv); 
//((ViewGroup)table.getParent()).removeView(table); 
table.addView(row); 

//}

}

+0

謝謝你做到了! – cstokes2

0

您正在向父項添加相同的視圖對象。所以,你得到IllegalStateException。 如果您使用「id」屬性分隔子視圖,則添加將會成功。您可以通過散列碼方法將不同的ID賦予子視圖。

+0

謝謝,但林不熟悉的hashCode方法?你能指出一個鏈接嗎? @sercan – cstokes2

+1

hashCode方法返回對象的整數值。這個值對於每個對象都是不同的。所以,當你爲視圖分配id時,你可以使用view.setId(view.hashCode())。你可以在維基百科或在這裏學習哈希碼:http://stackoverflow.com/questions/2427631/how-is-hashcode-calculated-in-java –

+0

我試過了hashCode方法,它仍然拋出相同的錯誤@sercan – cstokes2