我有模型对象数据的数组,我在自定义ArrayAdapter中的模型对象数组中显示listview中的文本和图像。
它像android联系人视图,我想实现搜索功能。
任何人都可以请教我,如何实现自定义适配器的过滤器,它显示来自模型对象的数据。
示例示例链接或代码片段也没问题。
答案 0 :(得分:0)
您只需要过滤底层集合(例如:What is the best way to filter a Java Collection?)
当过滤条件发生变化时,您只需发出更改数据集的信号,并使用过滤列表实例提供条目数量和单个视图
答案 1 :(得分:0)
我实际上不喜欢复制原始列表的方法。这既费时又耗费内存。我采取的方法只是让想要的物品可见,而不想要的物品是GONE。 我的示例是TableLayout,我在其中过滤TableRows,每个都有一个TextView。
public void filter(TableLayout tl, String regex) {
TableRow tr;
TextView tv;
Pattern p;
Matcher m;
p = Pattern.compile(regex);
int n = tl.getChildCount();
for(int i = 0; i < n; i++) {
tr = (TableRow) tl.getChildAt(i);
tv = (TextView) tr.getChildAt(0);
m = p.matcher(tv.getText());
if(m.find()) {
tr.setVisibility(View.VISIBLE);
} else {
tr.setVisibility(View.GONE);
}
}
我没有对它进行分析,但我确信它比复制列表中的所有元素然后过滤然后显示新列表要快。
随着你的名单变大,优势应该更加明显。
但是,需要注意的是,我必须承认,尽管它可以很好地过滤几百行,但我担心当行数太大而需要超过5秒才能进行过滤时会发生什么。然后它应该触发App无响应对话框 我试图使它成为一个线程,但因为我直接处理视图可见性我得到一条错误消息,只有原始线程可以触摸视图。我正在努力,我相信我会找到解决方案。