【问题标题】:Filter two strings in the same ListView过滤同一个ListView中的两个字符串
【发布时间】:2014-04-09 08:37:30
【问题描述】:

我有一个 sqLite 数据库,其中包含一个包含 3 列的表,我在布局中使用了一个编辑文本和一个 ListView。我现在所做的是使用编辑文本应用搜索并在ListView 中显示过滤结果。

以下代码应用于名为myFilter的edittext,words是implecursoraapter:

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());
    }
});

我要做的是过滤两个字符序列,例如我想在我的listView中显示以a和b开头的单词,我可以这样做吗(例如words.getFilter().filter("a","b");?

【问题讨论】:

    标签: java android android-listview


    【解决方案1】:

    按照here 的描述创建自定义FilterQueryProvider。 constraint 参数应该代表您的搜索查询(即将“a”和“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");
    

    【讨论】:

      【解决方案2】:

      如果您已经有了要搜索的值,则无需查询数据库。为此,您可以扩展您的 simpleCursorAdapter,您将在其中实现自己的过滤并处理发布结果。

      【讨论】:

        猜你喜欢
        • 2019-10-23
        • 2021-12-24
        • 1970-01-01
        • 2018-05-13
        • 1970-01-01
        • 2021-01-17
        • 2017-08-12
        • 1970-01-01
        • 2015-10-22
        相关资源
        最近更新 更多