2010-03-29 9 views
42

Po wywołaniu notifydatasetchanged(); chcę przewinąć do dolnej części listy, aby użytkownik zobaczył ostatni rekord w widoku listy.Jak programowo przejść do dołu ListView?

(piszę moduł Czat więc w tym celu muszę najnowszą płytę u dołu listy, aby były widoczne)

Może ktoś mnie prowadził, jak to osiągnąć?

Odpowiedz

71

Spróbuj

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

„post” wydaje się być wymagana kiedyś w moim doświadczeniu, zwłaszcza jeśli niedawno zaktualizowany wykaz.

+1

to działa świetnie. Próbowałem 'android: stackFromBottom =" true "', a problem polega na tym, że jeśli w moim widoku listy był tylko jeden element, byłby to dół ekranu. Dzięki – philipp

+0

Uwaga: jeśli wysokość ostatniego elementu jest większa niż wysokość widoku listy, górna część ostatniego elementu zostanie wyrównana do początku listy, tj. Dolna część elementu nie będzie widoczna. Dlatego rozwiązanie stackFromBottom opisane przez Ribose jest lepsze dla funkcji podobnych do chata. –

+0

Pracował jak urok! Próbowałem też stackFromBottom = "true", ale ponieważ nie wyczyściłem listy, nie zadziałało to w mojej sytuacji. (Przynajmniej tak myślę.) – BostonGeorge

81

Wiem, że to zostało odebrane i wzięłaś odpowiedź, a było to ponad rok temu. Lepszym sposobem na zrobienie tego jest tryb transkrypcji. Aby zapoznać się z wersją demonstracyjną, zobacz Demo interfejsu API Androida w Widokach> Listy> Transkrypcja.

Użytkownik ustawiłby następujący widok w widoku listy w pliku XML.

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

To zawsze zadziała, gdy zadzwonisz pod numer notifyDataSetChanged(). Zamiast tego możesz ustawić android:transcriptMode na normal, jeśli chcesz uzyskać jeszcze lepszy wynik dla aplikacji do czatu: przewinie się do dołu tylko wtedy, gdy ostatni element był już widoczny. W ten sposób użytkownicy będą mogli oglądać poprzedni czat bez przerwy, gdy inni użytkownicy będą czatować.

+5

Wielkie dzięki! android: trancriptMode jest magiczny :) uratowałeś mnie! – Ciprian

+0

Naprawdę, jest to bardzo dobra opcja. Dziękuję :) – Dinesh

+0

fajnie! To działa ! – Penzzz

1

wiem, że bardzo późno, by odpowiedzieć, ale może być to pomoże kogoś. Użycie polecenia android:transcriptMode="alwaysScroll" zmusi widok listy do przewinięcia do dołu (jak tutaj użyliśmy android:stackFromBottom="true"), nawet jeśli spróbujesz przewinąć górę, co zwykle jest wymagane przez większość czasu. Zamiast więc android:transcriptMode="alwaysScroll możesz użyć numeru android:transcriptMode="normal, który będzie zachowywał się podobnie do wymagań aplikacji do czatu i nie wymusi na liście listy przewijania zawsze, gdy użytkownik chce zobaczyć zawartość na górze.

Powiązane problemy