Android ListView y позиция - PullRequest
       22

Android ListView y позиция

1 голос
/ 04 мая 2011

Кажется, что ListView не отображает свою y-позицию так же, как ScrollView. Другими словами: мне нужно запомнить точное положение, в котором был прокручен ListView, и установить его, когда я вернусь к занятию.

Просто чтобы уточнить: мне не нужен выбранный элемент ... это довольно просто. Мне нужно восстановить точную пиксельную y позицию в ListView.

Спасибо!

Ответы [ 3 ]

17 голосов
/ 04 мая 2011

Я успешно использовал это при сохранении (в onSaveInstanceState) и восстановлении (onCreate), при переключении ориентаций:

Сохранение:

    int savedPosition = list.getFirstVisiblePosition();
    View firstVisibleView = list.getChildAt(0);
    int savedListTop = (firstVisibleView == null) ? 0 : firstVisibleView.getTop();

Восстановление:

   if (savedPosition >= 0) { //initialized to -1
      list.setSelectionFromTop(savedPosition, savedListTop);
    }

Это точно сохранит позицию Y. Ну, время от времени он пропускает на несколько пикселей.

3 голосов
/ 04 мая 2011

Когда вы возвращаетесь из другого действия, ListView будет продолжать прокручиваться в исходное положение, в котором он был при выходе из этого действия ListView.Если вы обновляете содержимое списка, убедитесь, что вы просто используете notifyDataSetChanged () на адаптере, не переназначайте адаптер - это вернет список в начало.

Проверьте ваш метод onResume в вашемListView Activity, возможно, это повторное назначение адаптера списка.

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

2 голосов
/ 27 февраля 2012
Parcelable state = list.onSaveInstanceState();

// do stuff

list.onRestoreInstanceState(state);

Это единственный правильный способ, которым я знаю, для поддержания точного положения списка. Приведенное выше решение, помеченное как правильное, увеличивает / уменьшает несколько пикселей, поэтому на самом деле это не самое профессиональное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...