Android过滤器listview取决于使用sql语句的edittext输入

时间:2012-01-13 15:28:29

标签: android sqlite android-listview filtering

我想问一个小问题。我想知道哪种方法可以过滤我从sqlite数据库中填充的列表视图,我想根据用户在编辑文本中输入的字母进行过滤。我没有显示任何代码,因为我只有sqlite语句,就是这样。我必须更改我用来填充数据库的sqlite语句。

所以我的问题是,当用户在编辑文本中输入字母时,如何更改我的sqlite语句,以及如何使用使用新sql语句过滤的新数据更新listview。

2 个答案:

答案 0 :(得分:0)

我有同样的问题并按如下方式解决:

//Search text and changed handler
        EditText tbSearch = (EditText)findViewById(R.id.android_searchbox);
        tbSearch.addTextChangedListener(new TextWatcher() {
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void afterTextChanged(Editable s) {
                ListView av = getListView();
                SimpleCursorAdapter filterAdapter = (SimpleCursorAdapter)av.getAdapter();
                filterAdapter.getFilter().filter(s.toString());
            }
        });

        entries.setFilterQueryProvider(new FilterQueryProvider() {
            public Cursor runQuery(CharSequence constraint) {
                return mDbHelper.fetchAllEntries(constraint);
            }
        });

使用这种方法,您将需要一个类似于FetchAllEntries(string sFilter)的方法

/*
 * Override to return a Cursor over the list of Entries filtered by a
 * constraint
 * 
 * @return Cursor over filtered Entries
 */
public Cursor fetchAllEntries(CharSequence constraint) {

    if (constraint == null || constraint.length() == 0) {
        // Return the full list
        return fetchAllEntries();
    } else {

        String value = "%" + constraint.toString() + "%";

        String[] columns = new String[] { KEY_ROWID, KEY_TITLE,
                KEY_BODY, KEY_USER_PROFICIENCY };

        return mDb.query(DATABASE_TABLE, columns,
                KEY_TITLE + " like ? OR " + KEY_BODY + " like ? ", new String[] { value, value }, null, null,
                KEY_TITLE + " ASC ");

    }
}

这里我有一个包含两列(标题,正文)的表

答案 1 :(得分:0)

检查上一个问题的答案,它们非常相似:search bar