Lin*_*ton 3 android listview adapter
我想根据一些标准隐藏ListView中的一些项目.我找到了2个解决方案,但都没有.我试图View从getItem()方法返回empry ,但分隔符仍然可见.因此,如果我隐藏所有项目,例如它会导致大量的分隔线.第二个是设置View.GONE在getItem()方法.但ListView仍然为不可见的项目保留位置,这导致我的列表中的空视图.有没有人找到这个问题的解决方法?
编辑:另外我需要注意,我无法从数据集中删除任何数据.Adapter/ListView必须只能隐藏指定的项目.
Pau*_*aul 10
我将通过以下方式实现此目的:
在适配器内部创建一个列表/数组,它将保存要隐藏的项目的索引.
例如:
List<Integer> hiddenItems;
Run Code Online (Sandbox Code Playgroud)覆盖适配器getCount()方法以返回列表中的项目数减去步骤1中提到的集合中的项目数.
例如:
@Override
public int getCount() {
return items.size() - hiddenItems.size();
}
Run Code Online (Sandbox Code Playgroud)重写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)更新:
是的,您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)
如果您计划再次在列表中使用这些项目,请将它们存储在单独的位置例如将它们存储在文件或数据库中,这最适合您的需求.
| 归档时间: |
|
| 查看次数: |
10713 次 |
| 最近记录: |