In meiner App habe ich einen ContentProvider an eine Tabelle in einer Datenbank mit einem CursorLoader angehängt, der eine ListView in einer meiner Aktivitäten füllt. Diese Tabelle ist standardmäßig leer gefüllt und wird mit Benutzereingabedaten gefüllt. Ich möchte dem Benutzer erlauben, alle ihre gespeicherten Daten vollständig zu löschen, und ich lösche die gesamte Datenbank, wenn diese Option ausgewählt ist. Die Datenbank wird dann im Standardzustand neu erstellt, wenn der Benutzer die App erneut verwendet, genau wie bei der ersten Verwendung der App.Erzwingen eines Inhaltsanbieters zum Zurücksetzen beim manuellen Löschen der Datenbank
Mein Problem ist, wenn ich die Datenbank lösche, der ContentProvider erkennt nicht, dass die Datenbank gelöscht wurde und wenn ich zurück zu meiner Listview-Aktivität gehe, ist die Liste immer noch da. Ich mache auch die App komplett neu laden die ListView Activity, anstatt nur aus dem Speicher wiederaufzunehmen und die Liste ist immer noch da, obwohl die Datenbank leer ist. Die einzige Möglichkeit, den ContentProvider neu zu laden, besteht darin, die App in den Systemeinstellungen zu beenden und sie dann erneut zu öffnen.
Gibt es eine Möglichkeit, den ContentProvider zwangsweise neu zu starten oder ihm mitzuteilen, dass die Daten von außerhalb der ContentProvider-Klasse selbst aktualisiert wurden?
Ja, das ist, was ich tue. Das Problem hierbei ist, dass der ContentProvider nur an eine Tabelle meiner Datenbank angefügt ist und eine separate Aktivität, die den Provider nicht verwendet, die gesamte Datenbank löscht, wenn der Benutzer die getApplicationContext(). DeleteDatabase (myDb) durchlaufen möchte. Gibt es eine Möglichkeit, einen Trigger an den Provider zu senden, um ihn neu zu starten/zu aktualisieren, wenn ich keinen direkten Zugriff auf den contentResolver habe? Ich verwende derzeit die Löschmethode in meinem Provider, um einzelne Zeilen aus der Tabelle zu löschen, die für meinen Listenansicht/Cursoradapter verwendet wird, wie Sie vorschlagen. – wynalazca
Wenn Sie einen Loader verwenden, um die Listenansicht zu laden, können Sie den Neustart auch direkt nach dem Löschen der Datenbank aufrufen – wangyif2
Haben Sie das Problem behoben? Haben Sie den Loader-Ansatz ausprobiert? – wangyif2