it-swarm.com.ru

Просмотр списка Прокрутите до конца списка после обновления списка

Я хотел бы убедиться, что список прокручивается до самого низа после того, как я обновил представление списка с помощью listAdapter, чтобы он отображал последний элемент, введенный в список. Как я могу это сделать ?

Я попробовал это, но не повезло:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

благодарю вас

282
jramirez

Предположим, вы знаете, когда изменились данные списка, вы можете вручную указать, что список прокручивается вниз, установив выбор списка в последнюю строку. Что-то вроде:

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);
        }
    });
}
405
Mason Lee

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

  • Прокрутка lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

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

Вы также можете установить эти параметры в XML, например. как это:

<ListView
   ...
   Android:transcriptMode="alwaysScroll"
   Android:stackFromBottom="true" />
232
dev.serghini

Комбинация 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);    
    }
});
36
Wärting

Я успешно использовал это в ответ на нажатие кнопки, поэтому я думаю, что вы можете использовать его и после обновления содержимого:

myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
27
Álex

Использование: Установить заголовок списка на нижнюю lv.setStackFromBottom(true);

Сработало для меня, и список автоматически прокручивается до самого дна, когда он впервые отображается. Затем список прокручивается как следует с помощью TRANSCRIPT_MODE_ALWAYS_SCROLL.

9
Kevin Parker

Чтобы получить это в ListFragment:

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
getListView().setStackFromBottom(true);`

Добавил этот ответ, потому что если кто-то делает поиск в Google для той же проблемы с ListFragment, он просто находит это ..

С уважением

9
Klatschen

Я использую

setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

добавить записи внизу, а старые записи прокрутить сверху, как стенограмма чата

6
Plugie

Режим расшифровки - это то, что вам нужно, и он используется Google Talk и приложением SMS/MMS. Правильно ли вы вызываете notifyDatasetChanged () на вашем адаптере при добавлении элементов?

3
Romain Guy

Самое простое решение:

    listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
    listView.setStackFromBottom(true);
2
ucMedia