ListView隐藏了一些项目

Lin*_*ton 3 android listview adapter

我想根据一些标准隐藏ListView中的一些项目.我找到了2个解决方案,但都没有.我试图ViewgetItem()方法返回empry ,但分隔符仍然可见.因此,如果我隐藏所有项目,例如它会导致大量的分隔线.第二个是设置View.GONEgetItem()方法.但ListView仍然为不可见的项目保留位置,这导致我的列表中的空视图.有没有人找到这个问题的解决方法?

编辑:另外我需要注意,我无法从数据集中删除任何数据.Adapter/ListView必须只能隐藏指定的项目.

Pau*_*aul 10

我将通过以下方式实现此目的:

  1. 在适配器内部创建一个列表/数组,它将保存要隐藏的项目的索引.

    例如:

    List<Integer> hiddenItems;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 覆盖适配器getCount()方法以返回列表中的项目数减去步骤1中提到的集合中的项目数.

    例如:

    @Override
    public int getCount() {
        return items.size() - hiddenItems.size();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重写getItem()以返回由步骤1中的集合中包含的索引偏移的项目.

    例如:

    @Override
    public Object getItem(int position)
    {
        for (Integer hiddenIndex : hiddenItems) {
            if(hiddenIndex <= position)
                position++;
        }
    
        // Now your regular getItem code...
    }
    
    Run Code Online (Sandbox Code Playgroud)


Ume*_*ooq 6

更新:

是的,您add/remove甚至可以在将数据提供给适配器之后.将数据存储在一些中ArrayList<type>并将其传递给自定义适配器类.

ArrayList<String> dataList;

// store data in dataList 
list.setAdapter(CustomAdapter(YourClass.this, dataList));
Run Code Online (Sandbox Code Playgroud)

最简单的解决方法是remove从ListView和调用的适配器中获取这些项目notifyDataSetChanged().这将remove the cells/row是列表中的那些项目.

 adapter.remove(object);
 adapter.notifyDataSetChanged(); // this will update your ListView
Run Code Online (Sandbox Code Playgroud)

如果您计划再次在列表中使用这些项目,请将它们存储在单独的位置例如将它们存储在文件或数据库中,这最适合您的需求.