从其ONItemClickListener上的listview中删除项目

时间:2014-04-19 13:32:23

标签: android listview android-listview

我正在使用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上包含许多更复杂的功能。请帮助我,我出错了!

2 个答案:

答案 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