2010-02-27 16 views
7

Al momento, sto riscontrando problemi nel tentativo di implementare un FilterQueryProvider nel mio SimpleCursorAdapter personalizzato, poiché non sono sicuro di cosa fare nella funzione runQuery di FilterQueryProvider.Android: filtro di SimpleCursorAdapter ListView

In altre parole, poiché la query che comprende il mio ListView ottiene fondamentalmente la riga, il nome e una terza colonna dalla tabella del mio database, voglio essere in grado di filtrare il cursore in base al valore parziale della colonna del nome.

Tuttavia, sono incerto se posso farlo direttamente da RunQuery senza espandere la mia classe DB perché voglio filtrare il cursore esistente, o dovrò creare una nuova funzione di query nella mia classe DB che ricerca in parte la mia colonna nome, e in caso affermativo, come andrei a creare la dichiarazione della query mentre si utilizza l'argomento del vincolo CharSequence in runQuery?

Sono inoltre preoccupato per i problemi di prestazioni associati al tentativo di eseguire più query basate sul testo parziale poiché la tabella DB in questione ha circa 1300-1400 righe. In altre parole, dovrei imbattermi in un collo di bottiglia cercando di filtrare il cursore?

risposta

3

è necessario eseguire una query che restituirà un nuovo cursore filtrato:

public class MyActivity extends ListActivity implements FilterQueryProvider { 

    private Cursor cursor; 

    @Override 
    public Cursor runQuery(CharSequence constraint) { 
     if(cursor != null) { 
      cursor.close(); 
     } 
     cursor = somehowGetAFilteredCursorFor(constraint); 
     startManagingCursor(cursor); 
     return cursor; 
    } 

}

+0

cursore chiusura provoca un comportamento strano - ListView non sta filtrando immediatamente, dopo aver nascosto solo tastiera virtuale. inoltre ci sono messaggi di avviso in logcat su due volte e più volte cursore chiuso – vokilam

Problemi correlati