Подтвердить что ты не робот

Как прокручивать в нижней части списка ListView программно?

После вызова notifydatasetchanged(); я хочу прокрутить список в нижней части, чтобы пользователь увидел последнюю запись в Listview.

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

Может ли кто-нибудь посоветовать мне, как это сделать?

4b9b3361

Ответ 1

Try

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

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

Ответ 2

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

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

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

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

Ответ 3

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