2010-03-29 12 views
42

Nach dem Aufruf notifydatasetchanged(); Ich möchte bis zum Ende der Liste scrollen, so dass Benutzer den letzten Datensatz in der Listview sehen.Wie programmgesteuert zum Ende von ListView blättern?

(Ich schreibe Chat-Modul so zu diesem Zweck ich letzte Aufzeichnung am unteren Rand der Liste müssen sichtbar sein)

Kann jemand mich leiten, wie dies zu erreichen?

Antwort

71

Versuchen

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

Die ‚Post‘ erforderlich irgendwann in meiner Erfahrung zu sein scheint, vor allem, wenn Sie vor kurzem die Liste aktualisiert haben.

+1

das funktioniert super. Ich habe 'android: stackFromBottom =" true "' vorher versucht und das Problem ist dann, dass, wenn es nur ein einzelnes Element in meiner Listenansicht gäbe, es am unteren Bildschirmrand wäre. Danke – philipp

+0

Hinweis: Wenn die Höhe des letzten Elements größer als die Höhe der Listenansicht ist, wird der obere Teil des letzten Elements am Anfang der Liste ausgerichtet, d. H. Der untere Teil des Elements wird nicht sichtbar sein. Das ist der Grund, warum die von Ribose beschriebene StackFromBottom-Lösung besser für Chat-ähnliche Funktionen ist. –

+0

Arbeitete wie ein Charme! Ich habe auch versucht, StackFromBottom = "True", aber da ich nicht die Liste löschte es für meine Situation nicht funktioniert. (Zumindest glaube ich das ist der Grund.) – BostonGeorge

81

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

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

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

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

+5

Vielen Dank! android: transcriptMode ist magisch :) du hast mich gerettet! – Ciprian

+0

Wirklich ist es eine sehr gute Option. Danke :) – Dinesh

+0

cool! Es klappt ! – Penzzz

1

Ich kenne seine sehr spät, aber zu beantworten, kann es jemand helfen. Die Verwendung von android:transcriptMode="alwaysScroll" zwingt die Listview nach unten zu scrollen (wie hier haben wir android:stackFromBottom="true" verwendet), auch wenn Sie versuchen, oben scrollen, die in der Regel die meiste Zeit benötigt. Anstatt android:transcriptMode="alwaysScroll können Sie android:transcriptMode="normal verwenden, die sich ähnlich wie die Anforderung der Chat-App verhält und die Liste von Scroll immer dann nicht erzwingt, wenn der Benutzer den Inhalt oben sehen möchte.

Verwandte Themen