La manière idiomatique et imho correcte de mettre à jour automatiquement Cursor
s est d'appeler Cursor#setNotificationUri
quand ils sont créés et avant qu'ils soient remis à tout ce qui leur est demandé. Puis appelez ContentResolver#notifyChange
lorsque quelque chose dans l'espace de noms de Cursor
de Uri change. Par exemple, supposons que vous créiez une application de messagerie simple et que vous souhaitiez la mettre à jour lorsque de nouveaux messages arrivaient, mais que vous fournissiez également différents affichages sur le courrier. Je voudrais avoir des Uri de base définis.
content://org.example/all_mail
content://org.example/labels
content://org.example/messages
Maintenant, disons que je voulais obtenir un curseur qui m'a donné tout le courrier et être mis à jour l'arrivée de nouveaux mail:
Cursor c;
//code to get data
c.setNotificationUri(getContentResolver(), Uri.parse("content://org.example/all_mail");
maintenant le nouveau courrier arrive donc je préviens:
//Do stuff to store in database
getContentResolver().notifyChange(Uri.parse("content://org.example/all_mail", null);
Je devrais également informer tous les Cursor
s qui ont choisi pour les étiquettes ce nouveau message rencontré
for(String label : message.getLabels() {
getContentResolver().notifyChange(Uri.parse("content://org.example/lables/" + label, null);
}
Et aussi, peut-être un curseur visualise qu'un message spécifique afin de les informer ainsi:
getContentResolver().notifyChange(Uri.parse("content://org.example/messages/" + message.getMessageId(), null);
Les getContentResolver()
appels se produit lorsque les données sont accessibles. Donc, si c'est dans un Service
ou ContentProvider
c'est là que vous setNotificationUri
et notifyChange
. Vous ne devriez pas faire cela à partir de l'endroit où les données sont accédées, par exemple un Activity
.
AlarmProvider
est un ContentProvider
simple qui utilise cette méthode pour mettre à jour Cursor
s.
@randzero signifie que vous souhaitez mettre à jour les éléments ListView chaque fois nouvel élément est ajouté dans la base de données , est ce bien ? –