我最近为这个 SO question添加了赏金,但意识到原始问题要求的是 SimpleAdapter 而不是 ArrayAdapter。所以,这个问题与 ArrayAdapter 有关:
我希望能够使用多个搜索词过滤 ListView 中的 ArrayAdapter。例如,如果我的列表包含以下项目:
a thing
another thing
a different thing
nothing
some thing
如果我搜索“事物”,则所有术语都应在过滤结果中返回。这是可以使用以下代码完成的正常行为:
private TextWatcher filterTextWatcher = new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
myAdapter.getFilter().filter(s.toString());
}
};
然而; 如果我输入搜索短语“ a thing
”,我希望显示以下结果:
a thing
another thing
a different thing
事实上,我在结果“ a thing
”中返回的所有内容。由于过滤器正在查找整个字符串,因此它将空格视为搜索词的一部分。本质上,我要问的是如何过滤列表,而不是按一个特定的字符串,而是按多个搜索词,每个搜索词用空格分隔?只要每个搜索词在项目中至少出现一次,那么该项目就应该在结果中返回。
之前似乎在 SO 上提出过类似的问题(例如,请参阅本文顶部的链接,该链接涉及 SimpleAdapters),但我没有找到实现此目的的实际方法。我想答案将涉及将搜索短语分成单独的字符串,由空格字符分隔,然后在每个字符串上多次运行搜索,并且只返回与所有迭代匹配的结果......