Listview Прокрутка до конца списка после обновления списка
Я хотел бы убедиться, что список прокручивается до конца, после того, как я обновил список с помощью listAdapter, чтобы он отобразил последний элемент, введенный в список. Как я могу это сделать?
Я пробовал это, но не повезло:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
Благодарю вас
Ответы
Ответ 1
Предположим, что вы знаете, когда данные списка изменились, вы можете вручную указать списку для прокрутки вниз, установив список в последнюю строку. Что-то вроде:
private void scrollMyListViewToBottom() {
myListView.post(new Runnable() {
@Override
public void run() {
// Select the last row so it will scroll into view...
myListView.setSelection(myListAdapter.getCount() - 1);
}
});
}
Ответ 2
Вам нужно использовать эти параметры в своем представлении списка:
Вы также можете установить эти параметры в XML, например. например:
<ListView
...
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true" />
Ответ 3
В вашем макете xml задайте следующие параметры для списка.
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
Ура!!!
Ответ 4
Комбинация TRANSCRIPT_MODE_ALWAYS_SCROLL и setSelection заставила его работать для меня
ChatAdapter adapter = new ChatAdapter(this);
ListView lv = (ListView) findViewById(R.id.chatList);
lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
lv.setAdapter(adapter);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
lv.setSelection(adapter.getCount() - 1);
}
});
Ответ 5
У меня был успех, используя это в ответ на нажатие кнопки, поэтому я предполагаю, что вы также можете использовать его после обновления содержимого:
myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
Ответ 6
Использование:
Настройте головку списка внизу lv.setStackFromBottom(true);
Работала для меня, и список автоматически прокручивается донизу, когда он впервые отображается в видимость. Затем список прокручивается так, как следует, с помощью TRANSCRIPT_MODE_ALWAYS_SCROLL
.
Ответ 7
Я использую
setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
чтобы добавить записи внизу, а более старые записи прокручиваются сверху, например, транскрипт чата
Ответ 8
Чтобы получить это в ListFragment:
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
getListView().setStackFromBottom(true);`
Добавлен этот ответ, потому что, если кто-то делает поиск Google для той же проблемы с ListFragment, он просто находит это.
Привет
Ответ 9
Режим транскрипции - это то, что вы хотите, и используется Google Talk и приложением SMS/MMS. Правильно ли вы вызываете notifyDatasetChanged() на свой адаптер при добавлении элементов?