Поддерживать положение прокрутки GridView с помощью поворота экрана - PullRequest
13 голосов
/ 23 декабря 2011

Как сохранить положение прокрутки GridView (оно заполнено результатами поиска) во время переориентации экрана?

У меня есть GridView внутри фрагмента, и когда я поворачиваю экран, он возвращается наверх списка.

Чтобы сделать его еще более сложным, в альбомном режиме мой GridView имеет 3 столбца .. в портретном режиме он имеет 2 столбца.

Я не могу понять, как сохранить прокрутку GridView фрагмента до того места, где оно должно быть, когда меняется ориентация экрана.

Ответы [ 3 ]

24 голосов
/ 07 января 2013

Вы можете использовать следующий метод, он будет работать для всех версий Android.

Чтобы сохранить текущую позицию прокрутки:

int index = gridView.getFirstVisiblePosition();

Затем, после изменения ориентации, используйте следующий код дляустановить позицию gridView для сохраненного индекса:

gridView.setSelection(index);
19 голосов
/ 23 декабря 2011

Вы можете попробовать это:

Изначально вы должны получить текущую позицию прокрутки GridView, вызвав:

int index = gridview.getFirstVisiblePosition();

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

Полагаю, это может сработать:

gridview.smoothScrollToPosition(int index)

Надеюсь, это поможет!

1 голос
/ 05 декабря 2018

Использование getFirstVisiblePosition () хорошо, но я нашел хорошее решение, просто чтобы сохранить состояние просмотра.

//state of view (includes scroll position) as a Parceble
Parcelable mobileGalleryState = gridView.onSaveInstanceState();

//just restore previous state including all changes are made before
gridView.onRestoreInstanceState(mobileGalleryState);

Кстати, вы можете использоватьэто также для ListView.

...