Ответ 1
Try
listView.post(new Runnable(){
public void run() {
listView.setSelection(listView.getCount() - 1);
}});
"Пост", кажется, требуется когда-то в моем опыте, особенно если вы недавно обновили список.
После вызова notifydatasetchanged();
я хочу прокрутить список в нижней части, чтобы пользователь увидел последнюю запись в Listview.
(Я пишу модуль чата, поэтому для этой цели мне нужна последняя запись внизу списка, чтобы быть видимой)
Может ли кто-нибудь посоветовать мне, как это сделать?
Try
listView.post(new Runnable(){
public void run() {
listView.setSelection(listView.getCount() - 1);
}});
"Пост", кажется, требуется когда-то в моем опыте, особенно если вы недавно обновили список.
Я знаю, что на это был дан ответ, и вы ответили, и это было больше года назад. Но лучший способ сделать это - режим транскрипции. Для демонстрации см. Демонстрацию Android API в разделе "Виды" > "Списки" > "Стенограмма".
В представлении списка в XML вы должны установить следующее.
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
Он всегда будет работать, когда вы вызываете notifyDataSetChanged()
. Вы можете установить android:transcriptMode
на normal
вместо этого, если вы хотите получить еще лучший результат для приложений чата: он будет прокручиваться до нижней части только в том случае, если последний элемент уже был в поле зрения. Таким образом, ваши пользователи могут просматривать предыдущий чат без перерыва, когда другие пользователи общаются.
Я знаю, что очень поздно ответить, но может быть, это поможет кому-то. С помощью
android:transcriptMode="alwaysScroll"
заставит listview прокручиваться вниз (как здесь мы использовали android:stackFromBottom="true"
), даже если вы попытаетесь прокрутить верхнюю часть, которая обычно требуется большую часть времени. Поэтому вместо android:transcriptMode="alwaysScroll
вы можете использовать android:transcriptMode="normal
, который будет вести себя аналогично требованию чат-приложения и не будет всегда заставлять список прокрутки, если пользователь хочет увидеть содержимое вверху.