【问题标题】:Remove items from listview on its ItemClickListener从其 ItemClickListener 上的列表视图中删除项目
【发布时间】:2014-04-21 14:57:29
【问题描述】:

我正在使用 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 部分时,并非所有项目都被一次性删除 为什么! 在这个阶段我无法使用 Expandable Listview,因为活动在 List 上包含许多更复杂的功能。请帮助我哪里出错了!

【问题讨论】:

    标签: android listview android-listview


    【解决方案1】:

    创建一个新的ArrayList&lt;Collection&gt;,然后在其中添加您的项目,然后使用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);
     }
    

    编辑

    每次删除项目时,都会更改内部元素的索引。

    例如:假设您要删除 list1 ,然后 list[2] 变为 list1,因此您的代码下次将跳过 list1,因为现在您的计数器将移至 2。

    您还可以通过以下其他方式实现这一目标, Removing item while iterating it

    【讨论】:

    • 哦,你去。我正在使用 OLD List 更新/删除项目,却忘记了它的大小也在变化。另一个数组 List 为我解决了问题。谢谢!
    • 感谢 mahn,请参阅下面的答案,我们将其作为默认设置。 Arraylist remove 和 add all 方法使用 Iterator 来添加和删除项目。 ;)
    【解决方案2】:

    那么我现在到底做了什么。我没有再次循环遍历项目,而是这样做了:

    我创建了另一个列表并用主数组并行填充它。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多