2010-02-27 17 views
7

En este momento, me estoy encontrando con problemas al intentar implementar FilterQueryProvider en mi CustomCursorAdapter personalizado, ya que no estoy seguro de qué hacer en la función runQuery de FilterQueryProvider.Android: filtrado de SimpleCursorAdapter ListView

En otras palabras, como la consulta que comprende mi ListView básicamente obtiene rowID, name y una tercera columna de la tabla de mis bases de datos, deseo poder filtrar el cursor basado en el valor parcial de la columna de nombre.

Sin embargo, no estoy seguro si puedo hacer esto directamente desde runQuery sin expandir mi clase DB porque quiero filtrar el cursor existente, o tendré que crear una nueva función de consulta en mi clase DB que busque parcialmente mi nombre de la columna, y si es así, ¿cómo voy a crear la declaración de consulta al usar el argumento de restricción CharSequence en runQuery?

También me preocupan los problemas de rendimiento asociados al intento de ejecutar varias consultas basadas en texto parcial, ya que la tabla de DB en cuestión tiene aproximadamente 1300-1400 filas. En otras palabras, ¿me encontraría con un cuello de botella tratando de filtrar el cursor?

Respuesta

3

usted necesita para ejecutar una consulta que devolverá un nuevo cursor filtrada:

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

cursor de cierre provoca un comportamiento extraño - vista de lista no está filtrando de inmediato, después de ocultar único teclado suave. también hay mensajes warnin en logcat sobre cursor twicely y más veces cerrado – vokilam

Cuestiones relacionadas