2014-05-13 68 views
0

我有一個TableView中,我programmaticly行添加到使用一個簡單的循環,如以下刪除選定的孩子從父母的TableView

LayoutInflater inflater = LayoutInflater.from(getActivity());  
for (int i = 0; i < dataList.size(); ++i) 
{ 
    DataEntry dataEntry = dataList.valueAt(i); 
    // Add the row 
    TableRow row = (TableRow)inflater.inflate(R.layout.data_row, _table, false);    
    _table.addView(row); 
    row.setTag("dataRow"); 

    // Code that looks up the 'column' views and sets their value to the dataEntry 
} 

這是偉大的工作,並填充列表就好了。但是當我更改數據集時,我想清除所有添加的行,除了頭(第一個)行,然後添加一組新行(即運行上面的代碼)。所以我有這麼一點代碼:

final int childCount = _table.getChildCount(); 
for (int i = 1; i < childCount; ++i) 
{ 
    View view = _table.getChildAt(i); 
    _table.removeView(view); 
} 

這是我可以做的這個循環的最簡單的版本。我最初是在檢查空視圖,因爲它們在恢復任務時出現。然後我會檢查視圖的標記是否爲「dataRow」,並且只刪除數據行。但是,這一切都給了我同樣的結果。它會跳過標題(我從1開始而不是0開始),然後從下往下移除下一行,然後移除其他行。如果我運行這個循環足夠多的時間,它會清除列表,但添加一段時間(_table.getChildCount()> 1)就好像我顯然只是做錯了。 _table.removeAllChildren()將不起作用,因爲標題也會被刪除(並且它喜歡撕開視圖層次結構,這也不是我想要的)。

我只是沒有看到它是什麼我做錯了。我希望第二眼(或第二百眼)的眼睛可能會在我的思維中看到缺陷。

回答

0

我在問這個問題後約4分鐘就想出了它。

我正在循環瀏覽孩子並將其刪除。父母然後滑動所有條目。改變for循環以下工作(並ironicly把這個for循環進入一段時間(> 1)我覺得似乎是個好主意。

for (int i = 1; i < childCount; ++i) 
    _table.removeView(_table.getChildAt(1)); 

現在,這是有道理的,我看它。我應該從底層去掉一些更乾淨的代碼,並且應該記住這是從鏈表中刪除項目的正確方法,這可能是兒童列表中的項目。