У меня была такая же проблема, хотя вместо установки FilterQueryProvider
в SimpleCursorAdapter
я использовал метод overidden runQueryOnBackgroundThread(CharSequence constraint)
при создании экземпляра SimpleCursorAdapter
.
Например.
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list, cursor, from, to) {
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint){
Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
startManagingCursor(cur);
return cur;
}
};
Но если вы хотите очистить фильтр, все, что вам нужно сделать, это получить ListView
и вызвать его метод clearTextFilter()
. Поэтому, если ваша активность расширяется ListActivity
, вы можете использовать следующее:
ListView lv = getListView();
lv.clearTextFilter();
Добавьте приведенные выше строки в метод, в котором вы повторно загружаете данные в список, то есть каждый раз, когда отображается ваш ListActivity
.
В качестве альтернативы, если вы хотите сохранить фильтр активным и повторно применить его к ListActivity
, когда пользователь вернется к нему. Вы можете получить текущий введенный текст фильтра из ListActivity
как CharSequence
и передать его текущему Filter
*1022*:
adapter.getFilter().filter(lv.getTextFilter());
Снова добавьте вышеупомянутые строки в метод, в котором вы повторно загружаете данные в список, и он повторно применит существующий фильтр.