Para un cursor SimpleCursorAdapter, sólo es necesario utilizar el setFilterQueryProvider, para ejecutar otra consulta para el cursor, basado en la restricción:
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
}
});
Cuando se añade una restricción (. Por ejemplo mediante el uso de un TextView) el adaptador se debe filtrar:
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);
}
}
Espero que esto ayude. Trataré de escribir un artículo completo, con el código fuente en los próximos días.
Una buena respuesta, una de las pocas que muestra la parte de runQuery con el cursor, sería aún mejor si incluyese un ejemplo de la selección. P.ej. selection = FIELD_NAME_TO_FILTER + "like" "+ constraint.toString() +" '"; – DEzra
¿Cómo debemos llamar un cursor en runQuery si estamos usando una base de datos SQLite? Usar la misma instancia de databaseHelper que la utilizada para crear el cursor para SimpleCursorAdapter me está dando un error de "Invalid statement in fillWindow()". – rohitmishra
¿El estado 'm_slvAdapter' para' m_Adapter'? – r4m