ListView прокрутите список до конца после обновления списка
Я хотел бы убедиться, что список прокручивается полностью вниз, после того, как я обновил listview с помощью listAdapter, чтобы он отображал последний элемент, введенный в список. Как я могу это сделать ?
Я пробовал это, но не повезло:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
спасибо
8 ответов
Предположим, вы знаете, когда данные списка изменились, вы можете вручную указать список для прокрутки вниз, установив выбор списка в последнюю строку. Что-то вроде:
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);
}
});
}
вам нужно использовать эти параметры в представлении списка:
свиток
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
установите заголовок списка в его нижней части
lv.setStackFromBottom(true);
вы также можете установить эти параметры в XML, например. вот так:
<ListView
...
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true" />
сочетание 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);
}
});
У меня был успех, используя это в ответ на щелчок кнопки, поэтому я думаю, что вы можете использовать его тоже после обновления содержимого:
myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
используя :
Установите заголовок списка в нижней части lv.setStackFromBottom(true);
работал для меня, и список автоматически прокручивается вниз, когда он впервые отображается. Затем список прокручивается как следует с TRANSCRIPT_MODE_ALWAYS_SCROLL
.
чтобы получить это в ListFragment:
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
getListView().setStackFromBottom(true);`
добавлен этот ответ, потому что если кто-то делает поиск google для той же проблемы с ListFragment, он просто находит это..
в отношении
Я использую
setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
чтобы добавить записи внизу, а старые записи прокручиваются сверху, как транскрипт чата
режим транскрипта-это то, что вы хотите, и используется Google Talk и приложением SMS/MMS. Правильно ли вы вызываете notifyDatasetChanged () на адаптере при добавлении элементов?