2009-12-05 19 views
8

Tengo un ListView que utiliza un CursorAdatper como su adaptador. me gustaría tener la vista de lista paraCómo actualizar un ListView para volver a consultar su cursor para volver a llenar sus datos y sus vistas

  • requery sus datos
  • refrescar su opinión una vez que la nueva consulta se realiza.

me trataron:

CursorAdapter adapter = (CursorAdapter)listView.getAdapter(); 
adapter.notifyDataSetChanged(); 

y yo tratamos:

CursorAdapter adapter = (CursorAdapter)listView.getAdapter(); 
adapter.getCursor().requery(); 

pero ninguno funcionó. Establecí un punto de interrupción en el método de consulta ContentProvider, pero no veo que se llame a la consulta o que mi ListView se actualice con nuevos datos.

¿Puede decirme cuál es la solución a mi problema?

Gracias.

Respuesta

16

Calling requery() en un proveedor de base de datos o contenido Cursor unido a través de un ListViewCursorAdapter actualiza automáticamente la lista (el segundo escenario anterior). Puede ver someexamples de esto. Si eso no funciona para usted, puede haber algún error en su ContentProvider o adaptador.

+0

Gracias por su ayuda. – hap497

+0

funciona, pero ¿qué tal el rendimiento? requery es fácil de usar, pero no sé si es bueno. – Emerald214

+9

requery ahora está marcado como obsoleto e incluso hay una pequeña nota que lo acompaña en el SDK. ¿Cuál es la mejor manera de hacer esto ahora? ¿Todavía es bueno usar requery? – marchinram

5

puede probar: adapter.changeCursor (cursor nuevo). Que funcione para mí

+0

funcionó para mí también. una nota para los programadores compañeros aquí. este changCursor() necesita ser llamado en el hilo de UI. Obtuve un bloqueo cuando la llamada proviene de un hilo de fondo –

11

En la nueva API (usando el administrador de cargador) que puede utilizar:

getLoaderManager().getLoader(_YOUR_LOADER_ID_).forceLoad(); 
+4

Una opción es también getLoaderManager(). RestartLoader(); – Anderson

+1

@Anderson con 'restartLoader' necesita suministrar los argumentos y devoluciones de llamada nuevamente,' getLoader' se basa solo en la ID. – TWiStErRob

4

Sé que esta respuesta es probablemente demasiado tarde, pero para tu información a otras personas, si está utilizando un cargador de cursor (como probablemente deberías hacerlo), simplemente haz

getContext(). getContentResolver(). notifyChange (uri, null);

donde uri es el mismo URL utilizado para el cargador de cursor.

Cuestiones relacionadas