Я была такая же проблема и решить ее следующим образом:
//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 (строка 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 ");
}
}
Здесь у меня есть таблица с две колонки (название, корпус)
Любые идеи, как я могу заставить это работать с BaseAdapter. Поскольку адаптер, который я использую, представляет собой реализацию ленивой загрузки, и он расширяет BaseAdapter. –
хм .. жаль, что я не знаю много о типах адаптеров, но на основе [того, что я читал] (http://www.vogella.de/articles/AndroidListView/article.html), для чего создан SimpleCursorAdapter. Работа с базой данных напрямую .. –