我正在使用ArrayList的集合来填充我的Listview。我的ListView包含两个单独的行类型。
页眉和页脚。
我正在尝试在Listview上实现ExpandableListView功能,我试图在点击标题直到下一个标题时删除一些项目。 我正在使用此函数来遍历项目并删除项目
private void removeItems(int value)
{ Log.e(Constant.LOG, items.size()+"");
for (int i = value;i < items.size(); i++) {
if(!items.get(i).isSection())
items.remove(i);
}
Log.e(Constant.LOG, items.size()+"");
adapter = new EntryAdapter(this, items, this);
mListView.setAdapter(adapter);
}
问题是:我无法一次性从列表中删除所有项目,有些会留在那里!
我试过循环通过adapter.count();但没有运气
我的清单: 第1节 项目1 项目2 项目N. 第2节 但是,当我点击第1节时,并不是所有的ITEMS都会被一次性删除! 我无法在此阶段使用Expandable Listview,因为活动在List上包含许多更复杂的功能。请帮助我,我出错了!
答案 0 :(得分:1)
创建一个新的ArrayList<Collection>
,然后在其中添加您的项目,然后使用removeAll(collection)
。
尝试这个:
private void removeItems(int value)
{ Log.e(Constant.LOG, items.size()+"");
ArrayList<Collection> deleteItems= new ArrayList<Collection>();
for (int i = value;i < items.size(); i++) {
if(!items.get(i).isSection())
deleteItems.add(items.get(i));
}
items.removeAll(deleteItems);
Log.e(Constant.LOG, items.size()+"");
adapter = new EntryAdapter(this, items, this);
mListView.setAdapter(adapter);
}
修改强>
每次删除项目时,都要更改其中元素的索引。
例如:假设您要删除 list 1 ,然后 list [2] 变为 list {{ 3}} 因此您的代码下次会跳过 list 1 ,因为现在您的计数器将被移动到2。
以下是您实现此目的的其他方式, 1
答案 1 :(得分:0)
那我到底做了什么。我没有再次遍历项目,而是这样:
我创建了另一个列表,并将其与主阵列平行填充。
items.add(user);
// after populating items did this
newItems.addAll(items); // same collection ArrayList
最后我可以使用removeAll和addAll方法来使用主数组。
items.removeAll(newItems); // remove items
items.addAll(afterPosition,newItems); // add items after position