I have a ListView that is backed by a SimpleCursorAdapter.
I'd like to be able to filter the list like you would a contacts list, just by typing, and I came across the textFilterEnabled()
Problem is, I couldn't see how to get it to work with a SimpleCursorAdapter.
Is this even possible?
If so, how is it done?
For a SimpleCursorAdapter cursor, you only need to use the setFilterQueryProvider, to run another query for your cursor, based on the constraint:
m_Adapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
Log.d(LOG_TAG, "runQuery constraint:"+constraint);
//uri, projection, and sortOrder might be the same as previous
//but you might want a new selection, based on your filter content (constraint)
Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
return cur; //now your adapter will have the new filtered content
}
});
When a constraint is added (eg. by using a TextView) the adapter must be filtered:
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d(LOG_TAG, "Filter:"+s);
if (m_slvAdapter!=null) {
m_Adapter.getFilter().filter(s);
}
}
Hope this helps. I will try to write a complete article , with source code the next few days.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With