Dla kursorem SimpleCursorAdapter, trzeba tylko użyć setFilterQueryProvider, aby uruchomić kolejne zapytanie za pomocą kursora, na podstawie ograniczenia:
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
}
});
Kiedy ograniczenie dodaje (Np. Za pomocą TextView) adapter musi zostać odfiltrowany:
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);
}
}
Mam nadzieję, że to pomoże. Spróbuję napisać pełny artykuł, z kodem źródłowym na kilka następnych dni.
Dobra odpowiedź, jedna z niewielu, które pokazują część RunQuery z kursorem - byłaby jeszcze lepsza, gdyby dołączyć przykład wyboru. Na przykład. selection = FIELD_NAME_TO_FILTER + "like" "+ constraint.toString() +" ""; – DEzra
Jak wywołać kursor w runQuery, jeśli używamy bazy danych SQLite? Używanie tej samej instancji databaseHelper, jak ta używana do tworzenia kursora dla SimpleCursorAdapter, powoduje błąd "Niepoprawna instrukcja w fillWindow()". – rohitmishra
Czy "m_slvAdapter" występuje dla "m_Adapter"? – r4m