我想问一个小问题。我想知道哪种方法可以过滤我从sqlite数据库中填充的列表视图,我想根据用户在编辑文本中输入的字母进行过滤。我没有显示任何代码,因为我只有sqlite语句,就是这样。我必须更改我用来填充数据库的sqlite语句。
所以我的问题是,当用户在编辑文本中输入字母时,如何更改我的sqlite语句,以及如何使用使用新sql语句过滤的新数据更新listview。
答案 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