2014-05-13 70 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)); 

现在,这是有道理的,我看它。我应该从底层去掉一些更干净的代码,并且应该记住这是从链表中删除项目的正确方法,这可能是儿童列表中的项目。