2010-01-04 12 views

Odpowiedz

7

Sposób setTextFilterEnabled() nie automatycznie realizować filtrowanie, gdyż nie wie co w twojej Cursor tekst powinien być filtrowane przeciw.

Ten android-developers thread ma więcej szczegółów.

Właściwie, zostało zadane dobre pytanie na drugi dzień, które jest bardzo podobne do twojego pytania; choć pierwotnie był pytaniem, jak obsługiwać filtrowanie gdy nie ma fizycznej klawiatury na urządzeniu:

24

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.

+1

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

+2

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

+1

Czy "m_slvAdapter" występuje dla "m_Adapter"? – r4m

Powiązane problemy