2010-03-29 7 views
42

После звонка notifydatasetchanged(); Я хочу прокрутить список в нижней части, чтобы пользователь увидел последнюю запись в списке.Как прокручивать в нижней части ListView программно?

(я пишу модуль чата поэтому для этой цели мне нужно последняя запись в нижней части списка, чтобы быть видимыми)

Может ли один наставит меня, как достичь этого?

ответ

71

Попробуйте

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

«пост», кажется, потребуется где-то в моем опыте, особенно, если вы совсем недавно обновленный список.

+1

это отлично работает. Я попробовал 'android: stackFromBottom =" true "' раньше, и проблема в том, что если бы в моем списке было только один элемент, это будет нижней частью экрана. Спасибо – philipp

+0

Примечание: если высота последнего элемента больше высоты списка, верхняя часть последнего элемента будет выровнена между верхней частью списка, т. Е. Нижняя часть элемента не будет видимой. Вот почему решение stackFromBottom описано Ribose лучше для чат-подобных функций. –

+0

Работал как шарм! Я также попробовал stackFromBottom = "true", но поскольку я не очищал список, он не работал для моей ситуации. (По крайней мере, я думаю, именно поэтому.) – BostonGeorge

81

Я знаю, что на это был дан ответ, и вы ответили, и это было больше года назад. Но лучший способ сделать это - режим транскрипции. Для демонстрации см. Демонстрацию Android API в разделе «Виды»> «Списки»> «Стенограмма».

Вы должны установить следующее в своем виде списка в XML.

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

Он всегда будет работать, когда вы позвоните notifyDataSetChanged(). Вы можете установить android:transcriptMode на normal, вместо этого, если вы хотите получить еще лучший результат для приложений чата: он будет прокручиваться до нижней части только в том случае, если последний элемент уже был в поле зрения. Таким образом, пользователи могут просматривать предыдущий чат без перерыва, когда другие пользователи чат.

+5

Спасибо большое! android: transcriptMode волшебный :) ты спас меня! – Ciprian

+0

Действительно, это очень хороший вариант. Спасибо :) – Dinesh

+0

круто! Оно работает ! – Penzzz

1

Я знаю его очень поздно, чтобы ответить, но может быть, это поможет кому-то. Использование android:transcriptMode="alwaysScroll" заставит listview прокручивать вниз (как здесь мы использовали android:stackFromBottom="true"), даже если вы попытаетесь прокрутить верхнюю часть, которая обычно требуется большую часть времени. Таким образом, вместо android:transcriptMode="alwaysScroll вы можете использовать android:transcriptMode="normal, который будет вести себя аналогично требованию чат-приложения и не будет всегда заставлять список прокрутки, если пользователь хочет увидеть содержимое вверху.

Смежные вопросы