Android: comment utiliser CursorAdapter?
J'ai une base de données, un ListView
, et un CustomCursorAdapter
qui s'étend CursorAdapter
. Un bouton de menu ajoute un élément à la base de données. Je veux le ListView
de mettre à jour et de montrer ce changement. Normalement, il ne montre pas ce nouvel élément jusqu'à ce que je aller à l'écran d'accueil et rouvrez l'application.
J'ai fini par le faire fonctionner en appelant cursor.requery()
ou mCustomCursorAdapter.changeCursor(newCursor)
chaque fois que j'ai ajouté un nouvel élément, mais quand j'ai mis autoRequery à false dans le CursorAdapter
constructeur, il a travaillé de la même façon. Pourquoi faut-il mettre à jour correctement lorsque autoRequery est définie à false?
Suis-je à l'aide de CursorAdapter
correctement? Qu'est-ce que le standard de la façon de tenir la liste à jour avec la base de données? Et ce n'autoRequery faire?
OriginalL'auteur user316146 | 2010-08-23
Vous devez vous connecter pour publier un commentaire.
La idiomatiques et à mon humble avis bonne façon de mettre à jour automatiquement
Cursor
s est d'appelerCurseur#setNotificationUri
lorsqu'ils sont créés, et avant qu'ils soient transmis à ce que la demande. Appelez ensuiteContentResolver#notifyChange
quand quelque chose dans ceCursor
'Uri d'espace de noms changements.Par exemple, supposons que vous avez été la création d'une simple application de messagerie et que vous vouliez mettre à jour lorsque de nouveaux messages sont arrivés, mais aussi de fournir des vues différentes sur le mail. J'aurais quelques Uri de base est défini.
Maintenant, dire que je voulais obtenir un curseur qui m'a donné tous les messages et mises à jour à l'arrivée de nouveaux messages:
Maintenant l'arrivée de nouveaux messages, donc je préviens:
Je doit aussi notifier à tous les
Cursor
s sélectionné pour les étiquettes de ce nouveau message rencontréEt aussi, peut-être un curseur est à l'écoute de l'un message spécifique afin de les informer ainsi:
La
getContentResolver()
appelle arrive où l'on accède aux données. Donc, si c'est dans unService
ouContentProvider
qui est l'endroit où voussetNotificationUri
etnotifyChange
. Vous ne devriez pas faire d'où l'on accède aux données, par exemple, unActivity
.AlarmProvider
est un simpleContentProvider
qui utilise cette méthode pour mettre à jourCursor
s.Ce post est vraiment super! M'a beaucoup aidé aussi bien sur ma recherche! 🙂
Corrigez-moi si je me trompe
Cursor#setNotificationUri
mises à jour le curseur avec les données les plus récentes à chaque fois que leur est unegetContentResolver().notifyChanged
est ce que l'on appelle dansContentProvider
.Pourriez-vous préciser, se mettra à jour automatiquement les données lorsque vous notification de modification ou si vous avez besoin de faire autre chose à Curseur/CursorAdapter?
Cela ne fonctionne pas sur les activités,
OriginalL'auteur Rich Schuler
J'ai créé la méthode suivante pour ListView mise à jour:
mettre fin à des appels à chaque fois après un changement dans la base de données
OriginalL'auteur Anton Derevyanko