我有一组模型对象数据,并且我在我的自定义 ArrayAdapter 中的模型对象数组中显示列表视图中的文本和图像。
它就像 android 联系人视图,我想实现搜索功能。
谁能给我建议,如何为自定义适配器实现过滤器,它显示来自模型对象的数据。
示例链接或代码片段也可以。
你只需要过滤底层集合(像这样:过滤Java集合的最佳方法是什么?)
当过滤条件发生变化时,您只需发出数据集已更改的信号并使用过滤列表实例来提供条目数量和单个视图
我实际上不喜欢复制原始列表的方法。它既耗时又耗内存。我采取的方法是让想要的物品可见,而不需要的物品消失。我的示例是用于过滤 TableRows 的 TableLayout,每个都有一个 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 秒时会发生什么。然后它应该触发应用程序无响应对话框。
我试图让它成为一个线程,但是因为我直接处理视图可见性,我收到一条错误消息,只有原始线程可以接触视图。我正在努力,我相信我会找到解决方案。