Как прокрутить ListView вниз?

Я думал, что это будет простая задача, но, по-видимому, нет возможности прокрутить список вниз. Во всех найденных мною решениях используются варианты метода setSelection(lastItem), который устанавливает выделение только на последний элемент, но не прокручивает его до конца.

В моем случае у меня есть пустой список (с длинным набором заголовков empty view), и я хочу прокрутить его вниз.

Итак, есть ли способ сделать это?

Редактировать:

Итак, для тех, кому интересно, рабочее решение:

getListView().setSelectionFromTop(0, -mHeader.getHeight());

и

getListView().scrollTo(mOffset)

Это также работает со смещением вправо (рассчитывается на основе текущей позиции прокрутки), но может дать неожиданные результаты.


person Sver    schedule 25.09.2013    source источник
comment
возможный дубликат прокрутки Android в конец списка   -  person DroidDev    schedule 12.03.2014
comment
обратитесь к этому лучшему решению, если вы разрабатываете приложение для чата stackoverflow.com/questions/3606530/   -  person Mightian    schedule 11.05.2015


Ответы (10)


Попробуйте использовать list.scrollTo(0, list.getHeight());

person Maxim Efimov    schedule 25.09.2013
comment
Этот метод вызывает чрезмерную прокрутку - список расширяется (с большим количеством пустого места внизу), и в тот момент, когда вы пытаетесь его прокрутить, он сжимается. - person Sver; 25.09.2013
comment
Хорошо, направление было правильным, вам просто нужно прокрутить с правильным смещением. - person Sver; 25.09.2013

Если вы хотите, чтобы представление списка всегда прокручивалось внизу, даже если вы динамически обновляете представление списка, вы можете добавить эти атрибуты в само представление списка.

android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
person Rana Ranvijay Singh    schedule 03.05.2014

используйте следующее

    lv.setSelection(adapter.getCount() - 1);
person WISHY    schedule 25.09.2013
comment
Пожалуйста, прочтите мой вопрос еще раз, в списке только один ребенок, и я хочу прокрутить его до конца. Адаптера нет, только пустой вид (вид устанавливается через lv.setEmptyView (view)). - person Sver; 25.09.2013
comment
Извините, не пустой вид, а заголовок. - person Sver; 25.09.2013
comment
извини, приятель, я не знаю заголовка - person WISHY; 25.09.2013

Если вы хотите программно использовать анимацию прокрутки, вы можете легко прокрутить список до конца, используя:

listView.smoothScrollToPosition(adapter.getCount());

прокрутку вверх по списку можно выполнить с помощью:

listView.smoothScrollToPosition(0);
person Aryo    schedule 11.02.2014

Попробуйте этот ... он решит вашу проблему, я пробовал, и он отлично работает.

   listView.post(new Runnable(){
             public void run() {
             listView.setSelection(listView.getCount() - 1);
    }});
person Steve    schedule 14.08.2014

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);
        }
    });
}

Это работает для меня

person Pradip    schedule 25.11.2016

Используйте следующее и попробуйте.

listview.setSelection (адаптер.getCount () - 1);

person Pratik Dasa    schedule 25.09.2013
comment
Пожалуйста, прочтите мой вопрос еще раз, в списке только один ребенок, и я хочу прокрутить его до конца. Адаптера нет, только пустой вид (вид устанавливается через lv.setEmptyView (view)). - person Sver; 25.09.2013

Вы можете попробовать myListView.smoothScrollToPosition(myListView.getCount() - 1). Таким образом, вам не придется выбирать последнюю строку. Кроме того, вы получите плавную и красивую прокрутку! (:

person Hunter S    schedule 14.06.2015

У меня была такая же проблема, это лучше всего подходит для меня

listView.setSelection(listView.getAdapter().getCount()-1);
person Usman Shaikh    schedule 22.12.2015

если для вашего ListView не установлен адаптер, тогда у него вообще нет дочерних элементов, пустое представление не является дочерним элементом вашего ListView

person pskink    schedule 25.09.2013
comment
Да, извините, я немного ошибся здесь, есть ситуация, когда есть только пустое представление (здесь нет проблем) и когда есть только заголовок, который считается дочерним (нужно прокрутить его вниз). - person Sver; 25.09.2013