在同一个ListView中过滤两个字符串

时间:2014-04-09 08:37:30

标签: java android android-listview

我有一个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");

2 个答案:

答案 0 :(得分:0)

按照here所述创建自定义FilterQueryProviderconstraint参数应代表您的搜索查询(即打包""" 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,您将在其中实现自己的过滤并处理发布结果。