Что приводит к тому, что ListView сохраняет свою позицию прокрутки после изменения ориентации?

У меня есть Activity, содержащий ListView. Я заполняю список, используя SimpleCursorAdapter. Когда я запускаю приложение, я могу вручную прокрутить список в ListView (например, до 10-го элемента). Затем, когда я поворачиваю свой телефон – это разрушает и повторно создает мою активность, и ListView создается заново, как ожидалось.

Но на моем телефоне после поворота вновь созданная активность показывает мой ListView все еще в моей ручной позиции прокрутки (в этом примере – 10-я строка). Я уверен, что мой код не вызывает ListView.setSelection (int), так что вызывает повторное позиционирование ListView?

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

Читаю вокруг темы еще …

Состояние просмотра сохраняется автоматически (включая мой ListView). Это выполняется по умолчанию для onSaveInstanceState () / onRestoreInstanceState (). Используя отладчик, я вижу, что savedInstanceState включает запись из моего ListView – так это то, что автоматически переставляет его. Чтобы остановить это в моей деятельности, я могу просто переопределить onSaveInstanceState ().

Вы использовали ListActivity в качестве базового класса для своей деятельности? Если да, то это скорее всего функция, поскольку она переопределяет onRestoreInstanceState. Я попытался бы наследовать от простой Activity.

ListView восстанавливает свое состояние (включая положение прокрутки) после вращения экрана таким же образом и по той же причине, что, например, EditText сохраняет текст, который вы ввели в нем. Именно так разработана платформа Android. Вы можете остановить это поведение сохранения / восстановления, установив в файле макета xml атрибут android:saveEnabled="false" для ListView . Или вы можете вызвать setSaveEnabled(false) в ListView с той же целью.