Android GridView прокручивается вверх при нажатии элемента - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть GridView на Android, я заполняю пользовательскими изображениями. Когда пользователь нажимает на изображение, оно переходит к другой деятельности. Это отлично работает.

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

Возможно ли это?

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

Заранее спасибо!

Обновление: забыл упомянуть очень важный момент. Я застрял с API 7. Так что у меня нет smoothScrollToPosition.

1 Ответ

5 голосов
/ 15 февраля 2012

Попробуйте что-то вроде следующего:

private int _savedGridPosition = 0;
private GridView _gridView;

...

@Override
protected void onSaveInstanceState (Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("grid_position", _gridView.getFirstVisiblePosition());
}

@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if(savedInstanceState != null && savedInstanceState.containsKey("grid_position")) {
        _savedGridPosition = savedInstanceState.getInt("grid_position");
    }
}

@Override
protected void onResume() {
    _gridView.smoothScrollToPosition(_savedGridPosition);
}

@Override void onPause() {
    // set in onPause() too since onRestoreInstanceState() is only
    // called when the Activity is destroyed and recreated.
    _savedGridPosition = _gridView.getFirstVisiblePosition();
}
...