我有一个sqLite数据库,其中包含一个包含3列的表,我在我的布局中使用了edittext和ListView
。我现在所做的是使用edittext应用搜索并在ListView
中显示已过滤的结果。
以下代码适用于名为myFilter
的edittext,单词是implecursoradapter:
myFilter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
words.getFilter().filter(s.toString());
}
});
我想要做的是过滤两个Charsequences,例如我想在listView中显示以a和b开头的单词,我可以这样做吗(例如words.getFilter().filter("a","b");
?
答案 0 :(得分:0)
按照here所述创建自定义FilterQueryProvider
。 constraint
参数应代表您的搜索查询(即打包""" b"到单个CharSequence
。它可能是json,以逗号分隔字符串或SQL查询的一部分)。然后在runQuery(CharSequence constraint)
内过滤您的值,例如:
// Constraint is "a,b"
private FilterQueryProvider filterQueryProvider = new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
String[] queryParameters = constraint.split(",");
for (int i = 0; i < queryParameters.length(); i++) {
queryParameters[i] += "%";
}
return db.query(TABLE_NAME, new String[] {"column_name"},
"column_name LIKE '?' OR column_name LIKE '?'", queryParameters , null, null, null);
}
};
然后通过一次调用
完成过滤words.getFilter().filter("a,b");
答案 1 :(得分:0)
如果您已经拥有要搜索的值,则无需查询数据库。为此,您可以扩展simpleCursorAdapter,您将在其中实现自己的过滤并处理发布结果。