2012-06-06 1 views
0

Dans mon application, il y a une liste qui augmente dynamiquement de 10 éléments chaque fois que je fais défiler vers le bas. Ainsi, en utilisant l'orientation portrait, je défile jusqu'à 100 éléments, puis lorsque je change l'orientation en paysage, ma liste est à nouveau créée (affiche seulement les 10 premiers éléments). Le problème ici est quand je vais revenir à des plantages app portrait disant:lors de la modification de l'orientation de l'appareil listview est recréé

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 

comment faire la listview restaurer même changer l'orientation ???

+0

Pour arrêter la recréation, ajoutez le fichier manifeste 'android: configChanges =" orientation | keyboardHidden "' dans votre tag d'activité. –

Répondre

-2

Cela se produit parce que votre activité est recréée lors d'un changement d'orientation.
Pour éviter cela, ajoutez dans votre AndroidManifest.xml sous votre étiquette d'activité:

android:configChanges="orientation" 

et inclure cette méthode dans votre activité:

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

Hope it helps !!!

+1

Il n'est pas nécessaire d'implémenter onConfigurationChanged si vous ne changez rien (ce qui n'est normalement pas nécessaire si vous passez simplement de l'affichage paysage à l'affichage portrait et wrap_content ListView) – Tim

+0

Oui ... Mais si vous avez besoin de modifier toute position/position de position de contrôle basée sur le changement d'orientation, cette méthode sera donc nécessaire. Donc pas de mal à l'implémenter. – GAMA

+0

et newConfig dans le onConfigurationChanged doit être l'orientation ??? ou juste le nouveauConfig? – Housefly

-1

La réponse est assez simple: Vous devez changer AndroidManifest entrée de votre activité et ajoutez

android:configChanges="orientation" 

Celui-ci fera en sorte que si un changement d'orientation se produit si votre activité ne soit pas recréée.

Assurez-vous de remplacer la méthode onConfigurationChanged pour réagir au changement (si vous voulez réagir;))

+0

et ce qui doit être mis en œuvre dans le onConfigurationChanged .... pour dire de ne pas redémarrer l'activité ?? – Housefly

+0

Il existe déjà une super implémentation existante - vous n'avez pas besoin de la surcharger si vous appelez simplement super;) – Tim

+2

m'a sauvé beaucoup de temps :-) +1 – Thkru

0

Vous avez deux choix.

Option 1

Inclure android:configChanges="orientation" deux empêchent l'activité redémarrer Mais cela vous empêche de mettre en place différentes interface utilisateur pour une orientation différente.

Option 2

Si vous voulez configurer l'interface utilisateur différente pour différents Ensuite, vous Orientations devez écrire peu plus code.

Lire onSaveInstanceState et onRestoreInstanceState pour enregistrer et récupérer des valeurs pendant que redémarre l'activité.

Questions connexes