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

Вам нужно использовать эти параметры в своем представлении списка:

  • Scroll lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

  • Установите заголовок списка внизу lv.setStackFromBottom(true);

Вы также можете установить эти параметры в 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() на свой адаптер при добавлении элементов?