Per un cursore SimpleCursorAdapter, è sufficiente utilizzare il setFilterQueryProvider, per eseguire un'altra query per il cursore, sulla base del vincolo:
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
}
});
Quando si aggiunge un vincolo (es. Utilizzando un TextView) l'adattatore deve essere filtrato:
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);
}
}
Spero che questo aiuti. Proverò a scrivere un articolo completo, con il codice sorgente nei prossimi giorni.
Una buona risposta, una delle poche che mostra la parte runQuery con il cursore, sarebbe ancora meglio se includessi un esempio della selezione. Per esempio. selection = FIELD_NAME_TO_FILTER + "like '" + constraint.toString() + "'"; – DEzra
Come dovremmo chiamare un cursore in runQuery se stiamo usando un database SQLite? L'utilizzo della stessa istanza databaseHelper di quella utilizzata per creare il cursore per SimpleCursorAdapter mi dà un errore "Istruzione non valida in fillWindow()". – rohitmishra
Lo stato di 'm_slvAdapter' per' m_Adapter'? – r4m