Вопрос по android – Как отобразить последний элемент в представлении списка при прокрутке, чтобы динамически получать новые элементы?

0

У меня есть представление списка в моем приложении, которое первоначально показывает 10 элементов, и когда я прокручиваю до конца, оно динамически добавляет 10 элементов каждый раз. Моя проблема в том, что когда я прокручиваю до конца, дисплей переходит к первому элементу в списке (а не к недавно добавленным 10 пунктам), поэтому мне нужно прокрутить весь путь вниз.

я использовал

ListView.setSelection(totalItemCount - 9);

для отображения 1-го элемента из вновь добавленных 10 элементов. Но здесь происходит то, что дисплей фактически переходит к 1-му элементу списка, но снова автоматически прокручивается к 1-му элементу из недавно добавленных 10 элементов. Итак, UX здесь будет плохим .... я хочу, чтобы он изменился, чтобы он не попадал в начало списка. надеюсь, я объяснил это ясно, пожалуйста, помогите, спасибо

Ваш Ответ

3   ответа
0

вы захотите переопределить метод onSizeChanged (...) вашего списка.

Я полагаю, это было то, что он движется к своей вершине.

Попробуйте что-то вроде этого:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
setSelection(getCount()-9);
0

что установка выбора вручную является хорошим опытом для пользователей (поскольку они могут просматривать самые верхние элементы в списке).

После того, как вы динамически получили новый набор элементов, которые должны быть добавлены в список, вы можете просто вызвать метод addAll () и затем уведомить адаптер о необходимости обновления содержимого с помощью notifyDatasetChanged (). Listviews хорошо запоминают текущую позицию при обновлении.

да, я использую addAll () и noifyDataSetChanged () Housefly
1

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

int firstVisiblePosition = listView.getFirstVisiblePosition();

Edit Try this :

View view = listView.getChildAt(0);
int distFromTop = (view == null) ? 0 : view.getTop();

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

listView.setSelectionFromTop(firstVisiblePosition, distFromTop);
да, это то, как я сейчас реализую ..... что происходит, это 1-й идет к вершине, а затем приходит к setSelection (firstVisiblePosition) Housefly

Похожие вопросы