2009-12-05 7 views
8

Ho un ListView che usa un CursorAdatper come suo adattatore. Vorrei avere la visualizzazione elenco perCome aggiornare un ListView per richiedere il suo cursore per ripopolare i suoi dati e le sue viste

  • requery i suoi dati
  • aggiornare la sua posizione una volta che il requery è fatto.

ho provato:

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

e ho provato:

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

ma nessuno ha funzionato. Ho impostato un punto di interruzione nel metodo di query del mio ContentProvider, ma non vedo la chiamata della query o il mio ListView che si aggiorna con nuovi dati.

Potete dirmi per favore qual è la soluzione al mio problema?

Grazie.

risposta

16

Calling requery() su un database o fornitore di contenuti Cursor collegato a ListView tramite un CursorAdapter aggiorna automaticamente l'elenco (il secondo scenario di cui sopra). Puoi vedere someexamples di questo. Se questo non funziona, potrebbe esserci qualche bug nel tuo ContentProvider o adattatore.

+0

Grazie per il vostro aiuto. – hap497

+0

funziona, ma per quanto riguarda le prestazioni? la requery è facile da usare ma non so se è buona. La query – Emerald214

+9

è ora contrassegnata come deprecata e c'è anche una piccola nota che lo accompagna nel sdk. qual è il modo migliore per farlo ora, è bello usare ancora la richiesta? – marchinram

5

puoi provare: adapter.changeCursor (nuovo cursore). Esso funziona per me

+0

ha funzionato anche per me. una nota agli altri programmatori qui. questo changCursor() deve essere chiamato nel thread dell'interfaccia utente. Mi sono bloccato quando la chiamata proviene dal thread in background –

11

Nella nuova API (utilizzando Manager loader) è possibile utilizzare:

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

Un'opzione è anche getLoaderManager(). RestartLoader(); – Anderson

+1

@Anderson con 'restartLoader' è necessario fornire nuovamente arg e callback,' getLoader' si basa solo sull'ID. – TWiStErRob

4

So che questa risposta è probabilmente troppo tardi, ma Cordiali saluti agli altri, se si utilizza un caricatore cursore (come probabilmente dovresti farlo), solo

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

dove uri è lo stesso uri utilizzato per il caricatore del cursore.

Problemi correlati