gpt4 book ai didi

android - 如何通过 CharSequence 以外的东西过滤 ListView?

转载 作者:行者123 更新时间:2023-11-29 17:33:56 25 4
gpt4 key购买 nike

我正在编写自定义 BaseAdapter(由 Set 支持),我需要通过 CharSequence(价格范围、颜色等)。

我看了Filterable接口(interface)和Filter类,但是 Filter 中的所有方法都使用 CharSequence

那么,怎么做呢?我应该将过滤器参数编码为 CharSequence(也许是 JSON?),还是有更好的方法?

此外,convertResultToString 是什么?方法有什么用?因为我不需要结果是 String,而是来自 SetObject,因为我显示的信息比 多>字符串

最佳答案

如果您实现了 FilterableFilter,并且由于您的适配器由一组元素支持,您可以忽略 CharSequences public FilterResults performFiltering(CharSequence prefix) 方法。在您的适配器中,复制您的一组元素,这将是您将用来填充 ListView 或您正在使用的任何内容的元素。

之后,在 performFiltering(...) 方法中,只需按照您选择的标准删除元素:

private class ClientsFilter extends Filter {

@Override
public FilterResults performFiltering(CharSequence prefix) {

// Thats the result of our filtering process
FilterResults results = new FilterResults();

synchronized (mLock) {

// It's a good idea to work with a copy of the original set of elements, so we can reuse it every time we want to filter
ArrayList<Client> filteredClients = new ArrayList<>(originalClients);

for (int i = 0; i < filteredClient.size(); i++) {
if (// !fit my criteria) {
// We remove the clients that doesn`t fit the criteria, so only the good ones stay here
filteredClients.remove(i);
i--;
}
}

results.values = filteredClients;
results.count = filteredClients.size();
}

return results;

}

@Override
protected void publishResults(CharSequence prefix, FilterResults results) {
// And we use the filtered clients in our ListView, GridView or whatever
listViewClients= (ArrayList<Client>) results.values;
adapter.notifyDataSetChanged();
}
}

一些提示:

  • 不要忘记使用synchronized 东西,否则你会遇到一些有趣的错误(没有任何可见原因的竞争条件引起的 NPE)
  • 使用 Filterable 过滤过程在后台进行,因此 UI 保持响应
  • 当您想过滤结果时调用 adapter.getFilter().filter() 方法,例如在 EditText
  • 中写入时

关于android - 如何通过 CharSequence 以外的东西过滤 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31532229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com