我有一个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)并删除下一行,然后从那里删除每一行。如果我运行这个循环足够多次它将清除列表但添加一个while(_table.getChildCount()&gt; 1)似乎我显然只是做错了。 _table.removeAllChildren()将无法工作,因为标题随后被删除(它喜欢撕开视图层次结构,这也不是我想要的)。
我只是没有看到我做错了什么。我希望第二个(或第二百个)眼睛可以看到我思考的缺陷。
答案 0 :(得分:0)
在我问这个问题后4分钟左右,我想出来了。
我正在循环孩子并将其移除。然后父母将所有条目向下滑动。将for循环更改为以下作品(并且具有讽刺意味的是将此循环转换为一段时间(> 1)我认为这似乎是一个坏主意。
for (int i = 1; i < childCount; ++i)
_table.removeView(_table.getChildAt(1));
现在我看看它是有道理的..我应该从底部删除一些更干净的代码,并且应该记住这是从链表中删除项目的正确方法,这很可能是什么儿童名单是。