web-dev-qa-db-fra.com

Comment faire défiler vers le bas de ListView par programme?

Après avoir appelé notifydatasetchanged(); je veux faire défiler vers le bas de la liste pour que l'utilisateur voit le dernier enregistrement dans la liste.

(J'écris le module Chat, donc à cette fin, j'ai besoin que le dernier enregistrement au bas de la liste soit visible)

Quelqu'un peut-il me guider pour y parvenir?

46
UMAR

Essayer

listView.post(new Runnable(){
  public void run() {
    listView.setSelection(listView.getCount() - 1);
  }});

Le "post" semble être requis à un moment donné de mon expérience, en particulier si vous avez mis à jour très récemment la liste.

73
Jim Blackler

Je sais que cela a été répondu et vous avez pris la réponse et c'était il y a plus d'un an. Mais une meilleure façon de le faire est le mode Transcription. Pour une démonstration, consultez la démonstration de l'API Android Android sous Vues> Listes> Transcription).

Vous devez définir ce qui suit sur votre affichage de liste dans le XML.

Android:stackFromBottom="true"
Android:transcriptMode="alwaysScroll"

Cela fonctionnera toujours lorsque vous appelez notifyDataSetChanged(). Vous pouvez définir Android:transcriptMode Sur normal à la place si vous voulez un résultat encore meilleur pour les applications de chat: il ne défilera vers le bas que si le dernier élément était déjà en vue. De cette façon, vos utilisateurs peuvent afficher le chat précédent sans interruption lorsque d'autres utilisateurs discutent.

83
Ribose

Je sais qu'il est très tard pour répondre, mais cela aidera peut-être quelqu'un. En utilisant Android:transcriptMode="alwaysScroll" forcera la vue de liste à défiler vers le bas (comme ici, nous avons utilisé Android:stackFromBottom="true") même si vous essayez de faire défiler vers le haut, ce qui exigeait généralement la plupart du temps. Donc au lieu de Android:transcriptMode="alwaysScroll vous pouvez utiliser Android:transcriptMode="normal qui se comportera de manière similaire à l'exigence de l'application de chat et ne forcera pas la liste de défilement toujours si l'utilisateur veut voir le contenu en haut.

2
Toppers