Как прокрутить до конца ListView программно? - PullRequest
45 голосов
/ 29 марта 2010

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

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

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

Ответы [ 3 ]

82 голосов
/ 10 августа 2011

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

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

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

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

73 голосов
/ 29 марта 2010

Попробуйте

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

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

1 голос
/ 24 января 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...