2010-06-01 6 views
1

J'ai une application Android avec une liste dans une activité. Le listview a, si je l'appelle ainsi, trois états de données.Comment fonctionne le défilement dans android listview?

  1. aucune donnée chargée depuis inet -> un seul élément factice est visible, indiquant que les données sont en cours de chargement;
  2. les données sont chargées et affichées dans la liste;
  3. un clic est cliqué et affiche maintenant plus d'informations pour ce listitem (donc il est augmenté dans sa hauteur).

À chaque changement d'état (1 -> 2, 2 -> 3), j'appelle notifyDataSetChanged() sur ce ListAdapater. Cela provoque la liste déroulante pour faire défiler jusqu'au dernier élément. C'est moche dans la première transition et encore plus laide dans la seconde parce que l'élément de liste cliqué est maintenant flou. Comme je peux le voir, cela arrive avec un google g1 avec Android 1.6. Un contact htc avec le même sdk agit comme souhaité (je vais essayer de le comprendre avec d'autres appareils).

Pour éviter cela, j'ai essayé de lire getScrollY() et redéfinir cette valeur. mais cela renvoie 0. La raison de cette valeur de retour que j'ai déjà trouvée sur stackoverflow dans d'autres questions.

Quelqu'un d'autre a-t-il déjà vu ce problème? Pourquoi la liste affiche-t-elle le dernier élément? Il a été mentionné que listview garde la trace de la position de défilement. mais il semble que ce ne soit pas dans mon cas. Ou peut-être que j'appelle la mauvaise méthode d'actualisation? Est-ce que notifyDataSetChanged est le bon?

Répondre

0

Je crois que vous voulez:

listview.setTranscriptMode(ListView.TRANSCRIPT_MODE_DISABLED); 
+0

oui. c'était le point. THX. J'ai lu à ce sujet et j'ai vu que "disabled" est le comportement par défaut. donc je m'en foutais. maintenant je l'ai essayé explicitement dans la mise en page connexe xml et vu, qu'il était déjà réglé à "normal" là. je l'ai négligé à chaque fois quand j'ai essayé de découvrir la raison de l'erreur ... merci encore :) – gartenkralleb

Questions connexes