2013-04-19 9 views
5

Nella mia app ho un ContentProvider collegato a una tabella in un database con un CursorLoader che riempie un ListView in una delle mie Attività. Questa tabella è vuota per impostazione predefinita e viene riempita con i dati di input dell'utente. Voglio consentire all'utente di eliminare completamente tutti i dati memorizzati e sto cancellando l'intero database quando questa opzione è selezionata. Il database viene quindi ricreato nel suo stato predefinito quando l'utente inizia a utilizzare nuovamente l'app, proprio come se fosse la prima volta che utilizzava l'app.Come forzare il ripristino di un fornitore di contenuti durante l'eliminazione manuale del database

Il mio problema è quando cancello il database, il ContentProvider non rileva che il database è stato cancellato e quando torno alla mia attività listview, l'elenco è ancora lì. Sto anche facendo in modo che l'app ricarichi completamente l'attività ListView invece di riprendere solo dalla memoria e l'elenco è ancora lì anche se il database è vuoto. L'unico modo per ricaricare ContentProvider è quello di uccidere l'app nelle impostazioni di sistema e riaprirla.

C'è un modo per riavviare forzatamente ContentProvider o per dirgli che i dati sono stati aggiornati dall'esterno della classe ContentProvider stessa?

risposta

1

ho trovato la soluzione al mio problema qui: https://stackoverflow.com/a/8235584/1943155

mi è stato sempre il mio DBHelper nel onCreate della mia classe ContentProvider proprio come in altri post e ottenere un nuovo DBHelper in ogni metodo risolto il mio problema.

0

Si desidera popolare la listview con un cursoreAdapter e notificare il cursore quando il contenuto è stato modificato in contentProvider.

Nel metodo di eliminazione dell'implementazione del contentProvider, chiamare contentResolver.notify . Questo notificherà il cursore popolato dalla chiamata a contentResolver che c'è stato un cambiamento nei dati.

+0

Sì, questo è quello che sto facendo. Il problema qui è che ContentProvider è collegato solo a una tabella del mio database e un'attività separata che non utilizza il provider elimina l'intero database quando l'utente vuole attraverso getApplicationContext(). DeleteDatabase (myDb). C'è un modo per inviare un trigger al provider per riavviarlo/aggiornarlo quando non ho accesso diretto al contentResolver? Attualmente sto utilizzando il metodo delete nel mio provider per eliminare singole righe dalla tabella che viene utilizzata per il mio listview/cursoradapter, come suggerito. – wynalazca

+0

Se si sta utilizzando un caricatore per caricare listview, è anche possibile chiamare il riavvio sul caricatore subito dopo aver eliminato il database – wangyif2

+0

Hai risolto questo problema? Hai provato l'approccio del caricatore? – wangyif2

2

Si può anche semplicemente utilizzare il metodo di eliminazione del fornitore di contenuti senza definire una selezione:

context.getContentResolver().delete(YourProvider.CONTENT_URI, null, null); 
Problemi correlati