2012-06-06 2 views
0

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

06-06 12:06:54.849: E/AndroidRuntime(4684): java.lang.RuntimeException: 
Unable to start activity 
ComponentInfo{com.Android.MyApp/com.Android.MyApp.ListViewActivity}: 
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 

как сделать ListView восстановить даже при изменении ориентации ???

+0

Чтобы остановить отдых, добавьте в файл манифеста 'android: configChanges =" orientation | keyboardHidden "в вашем теге активности. –

ответ

-2

Это происходит потому, что ваша деятельность восстанавливается при изменении ориентации.
Чтобы избежать этого, добавьте это в AndroidManifest.xml под тегом активности:

android:configChanges="orientation" 

и включить этот метод в вашей деятельности:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    } 

Надеется, что это помогает !!!

+1

Не нужно внедрять onConfigurationChanged, если вы не собираетесь ничего менять (что обычно не нужно, если вы просто переключаетесь с пейзажа на портрет и имеете wrap_content ListView) – Tim

+0

Да ... Но если вам нужно изменить любой размер/положение позиции управления на основе изменения ориентации, поэтому этот метод будет необходим. Так что никакого вреда в его реализации. – GAMA

+0

и newConfig в onConfigurationChanged должны быть ориентированы ??? или просто newConfig? – Housefly

-1

Ответ довольно прост: Вы должны изменить AndroidManifest-запись вашей деятельности и добавить

android:configChanges="orientation" 

Этот будет убедиться, что если изменение ориентации происходит ваша активность не получает заново.

Убедитесь переопределить метод onConfigurationChanged реагировать на изменения (если вы хотите, чтобы реагировать;))

+0

и что должно быть реализовано в onConfigurationChanged .... чтобы не перезапускать активность? – Housefly

+0

Существует уже реализация супер реализации - вам не нужно переопределять ее, если вы просто вызываете супер;) – Tim

+2

спас меня много времени :-) +1 – Thkru

0

У вас есть два варианта.

Вариант 1

android:configChanges="orientation" Включить два предотвращения активности перезапуска Но это предотвратит вас от создания другого пользовательского интерфейса для различной ориентации.

Вариант 2

Если вы хотите установить различные UI для различных ориентаций Тогда вам придется писать немного больше коды.

Читайте onSaveInstanceState и onRestoreInstanceState, чтобы сохранить и получить значения, пока перезапуск.