Wie scrolle ich programmgesteuert zum Ende von ListView?

Lesezeit: 3 Minuten

Benutzer-Avatar
UMAR-MOBITSOLUTIONS

Nach dem Anruf notifydatasetchanged(); Ich möchte zum Ende der Liste scrollen, damit der Benutzer den letzten Datensatz in der Listenansicht sieht.

(Ich schreibe das Chat-Modul, also brauche ich zu diesem Zweck den neuesten Datensatz am Ende der Liste, um sichtbar zu sein.)

Kann mir jemand helfen, wie ich das erreichen kann?

Benutzer-Avatar
Ribose

Ich weiß, dass dies beantwortet wurde und Sie die Antwort angenommen haben, und es ist mehr als ein Jahr her. Aber ein besserer Weg, dies zu tun, ist der Transkriptmodus. Eine Demo finden Sie in der Android-API-Demo unter Ansichten > Listen > Transkript.

Sie würden Folgendes in Ihrer Listenansicht im XML festlegen.

android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"

Es funktioniert immer, wenn Sie anrufen notifyDataSetChanged(). Sie können einstellen android:transcriptMode zu normal Wenn Sie stattdessen ein noch besseres Ergebnis für Chat-Anwendungen wünschen: Es wird nur dann nach unten gescrollt, wenn das letzte Element bereits angezeigt wurde. Auf diese Weise können Ihre Benutzer den vorherigen Chat ohne Unterbrechung anzeigen, wenn andere Benutzer chatten.

  • Danke vielmals! android:transcriptMode ist magisch 🙂 du hast mich gerettet!

    – Ciprian

    14. Januar 2013 um 13:07 Uhr

  • Das Problem dabei ist, dass “wenn in meiner Listenansicht nur ein einziges Element vorhanden wäre, dies der untere Bildschirmrand wäre”.

    – Anuj Jindal

    14. September 2015 um 22:59 Uhr

Versuchen

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

Der ‘Post’ scheint meiner Erfahrung nach irgendwann erforderlich zu sein, insbesondere wenn Sie die Liste erst kürzlich aktualisiert haben.

  • das funktioniert super. Ich habe es versucht android:stackFromBottom="true" vorher und das Problem ist dann, dass, wenn es nur ein einziges Element in meiner Listenansicht gäbe, es das untere Ende des Bildschirms wäre. Vielen Dank

    – Philipp

    1. Mai 2012 um 22:27 Uhr

  • Hinweis: Wenn die Höhe des letzten Elements größer ist als die Höhe der Listenansicht, wird die Oberseite des letzten Elements an der Oberseite der Liste ausgerichtet, dh die Unterseite des Elements ist nicht sichtbar. Aus diesem Grund ist die von Ribose beschriebene stackFromBottom-Lösung besser für chatähnliche Funktionen geeignet.

    – Kar

    6. Februar 2013 um 12:24 Uhr

  • Lief wie am Schnürchen! Ich habe es auch mit stackFromBottom=”true” versucht, aber da ich die Liste nicht gelöscht habe, hat es in meiner Situation nicht funktioniert. (Zumindest denke ich, dass das der Grund ist.)

    – BostonGeorge

    24. November 2013 um 20:52 Uhr

  • Du hast recht, die post ist notwendig, wenn diese direkt danach aufgerufen wird notifyDataSetChanged(). Verwenden post verschiebt die setSelection() bis die Aktualisierung/Aktualisierung der Liste abgeschlossen ist.

    – Lächerlich

    18. November 2014 um 12:22 Uhr

Ich weiß, es ist sehr spät zu antworten, aber vielleicht hilft es jemandem. Verwenden

android:transcriptMode="alwaysScroll"
zwingt die Listenansicht, nach unten zu scrollen (wie hier verwendet android:stackFromBottom="true"), auch wenn Sie versuchen, nach oben zu scrollen, was normalerweise die meiste Zeit in Anspruch nimmt. Also statt android:transcriptMode="alwaysScroll Sie können verwenden android:transcriptMode="normal Dies verhält sich ähnlich wie die Anforderung der Chat-App und erzwingt nicht immer das Scrollen der Liste, wenn der Benutzer den Inhalt oben sehen möchte.

1090420cookie-checkWie scrolle ich programmgesteuert zum Ende von ListView?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy