IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[NotifyDataSetChanged] Je ne comprend pas cette notion et ou l'utiliser


Sujet :

Android

  1. #1
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut [NotifyDataSetChanged] Je ne comprend pas cette notion et ou l'utiliser
    Bonjour,

    Je suis face à un problème de curseur qui est utiliser dans mon adapter et qui devient NULL quand je change d'Intent.

    Après quelques recherches, j'ai trouvé qu'il fallait utiliser le NotifyDataSetChanged afin de prévenir l'adapter que les données qu'il utilise on changé ? (dites moi si je me trompe)

    Et ensuite une autre fonction du même genre dont je n'arrive pas à retrouver le nom... (si on peux me le rappeler ça serai gentil ! )

    Mon problème est que je n'arrive pas à comprendre ou et comment les utiliser ...


    Merci !

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    une discussion a déjà eu lieu sur ce sujet

    http://www.developpez.net/forums/d10...ckbox-adapter/

  3. #3
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut
    Ouai je l'avais déjà trouvé mais ça ne m'aide pas beaucoup .. je n'ai pas d’évènement dans mon adapter donc je n'ai pas accès à la fonction notifyDataSetChanged() dans ma ListActivity (qui elle, possède mes évènements).

    dans mon adapter j'ai juste un getView, getCount, getItemId et getItem ..

    et donc j'ai une erreur sur le cursor qui arrive une fois que j'ai changé de page...

    donc la je suis complètement bloqué ...

  4. #4
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut
    ok donc au final j'ai essayer le requery sur mon cursor, ça fonctionne mais je ne vois pas pourquoi le notify ne fait rien et surtout qu'est ce que ça fait exactement ?!

    Ca me gêne quand je code quelque chose que je ne comprend pas le fonctionnement interne !!!

    Si tu pouvais m'éclaircir un petit peu ce serai très sympa !

  5. #5
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    NotifyDataSetChanged:
    Notifies the attached View that the underlying data has been changed and it should refresh itself.
    C'est bien à partir de ta listview que tu dois utiliser cette procédure

    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((BaseAdapter) talistview.getAdapter()).notifyDataSetChanged ();
    Je suis face à un problème de curseur qui est utiliser dans mon adapter et qui devient NULL quand je change d'Intent.
    Maintenant si tu utilises un SimpleCursorAdapter, il faut que tu passes par un requery() sur le cursor .

  6. #6
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut
    ha ok, donc requery c'est la même chose mais pour simplecursor...

    Notifies the attached View that the underlying data has been changed and it should refresh itself.
    et le "refresh", il rappel la fonction de notre BDAdapter qui fournit le cursor ? (par exemple getUserList) Parce que sinon je ne vois pas avec quoi il fait le refresh, ça me parait donc bien étrange ...

    Ou alors c'est la View qui se resynchronise avec le curseur ? mais vu que dans mon cas sans le requery() il est NULL ça ne doit pas être ça ?!

  7. #7
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Ca a changé :s

    This method is deprecated.
    Don't use this. Just request a new cursor, so you can do this asynchronously and update your list view once the new cursor comes back.

    Performs the query that created the cursor again, refreshing its contents. This may be done at any time, including after a call to deactivate(). Since this method could execute a query on the database and potentially take a while, it could cause ANR if it is called on Main (UI) thread. A warning is printed if this method is being executed on Main thread.
    Returns

    * true if the requery succeeded, false if not, in which case the cursor becomes invalid.
    Ou alors c'est la View qui se resynchronise avec le curseur ? mais vu que dans mon cas sans le requery() il est NULL ça ne doit pas être ça ?!
    C'est bien l'adapter qui prévient la vue d'un changement , par contre pour un adapter avec un cursor , il faut que tu préviennes le cursor de l'adapter d'un changement .

    D'après la doc la méthode n'est plus a utilisé , il te conseille de créer un nouveau cursor et de mettre à jour ta listview .

  8. #8
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut
    Quel est l'utilité de passé un cursor dans le constructeur s'il faut que je le recréer en plein milieu de mon getView ?!

  9. #9
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    ok donc au final j'ai essayer le requery sur mon cursor, ça fonctionne mais je ne vois pas pourquoi le notify ne fait rien et surtout qu'est ce que ça fait exactement ?!

    Ca me gêne quand je code quelque chose que je ne comprend pas le fonctionnement interne !!!
    Pour résumer le NotifyDataSetChanged prévient l'adapter qu'un changement a été opéré et demande à la listeView de se mettre à jour par ce biais .

    Le problème avec le cursor est que l'adapter ne sait pas que le cursor a été mis à jour donc il affiche les même valeurs .
    C'est pour cela qu'il faut faire un requery() sur le cursor qui lui se mettra à jour et donc l'adapter en conséquence .
    Quel est l'utilité de passé un cursor dans le constructeur s'il faut que je le recréer en plein milieu de mon getView ?!
    ça je n'en sais rien, si les developper de google I/O demande de passer par là c'est qu'il doit y avoir une bonne raison sur le fonctionnement interne des adapters . Tu peux poser directement ta question à Romain Guy sur le forum de http://code.google.com pour avoir une réponse. C'est un des spécialiste des Adapter sous Android .

    Si tu as la réponse elle m'intéresse aussi .

  10. #10
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut
    Ok bon ben merci pour tout, j'ai envoyé un message je verrai bien si il est accepté !

    Pour l'instant je pars sur ce qui fonctionne et qui me parait le plus logique : requery() qui est censé rappeler ma fonction qui a initialisé mon Cursor si j'ai bien capté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Je ne comprend pas cette instruction
    Par Nono Sto dans le forum Général Python
    Réponses: 2
    Dernier message: 13/04/2010, 01h56
  2. [PHPExcel] Comprend pas cette écriture ?
    Par a028762 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/07/2009, 16h07
  3. Je ne comprends pas cette ligne de code
    Par beegees dans le forum C++
    Réponses: 17
    Dernier message: 13/05/2008, 12h02
  4. Comprend pas cette commande SED
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 14h58
  5. [Boolean]Je ne comprend pas cette instruction
    Par jcachico dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/01/2006, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo