Android changement d'orientation des appels onCreate
J'ai fait une recherche à l'écran qui a un onglet pour les mots clés, les filtres, et un bouton de recherche, et un choix de trois onglets pour les différents types de résultats (chacun contenant un ListView
avec un ArrayAdapter
). Lors du démarrage de l'activité, le développeur peut éventuellement transmettre dans les résultats comme un supplément Parcelable[]
si la recherche a déjà été effectué. Dans le onCreate()
méthode, je suis la création de chacun des trois onglets de la Parcelable[]
passé à travers.
Lorsque j'appelle une recherche sur le bouton situé sur l'onglet filtre, je effacer les onglets et les recréer avec les nouveaux résultats, qui fonctionne parfaitement. Le problème est que lorsque vous faites pivoter l'appareil, il semble que Android est l'orientation automatique de commutation de soutien recrée l'ensemble de l'activité, l'appel de onCreate()
. Cela signifie que mes résultats de recherche sont remis à la Parcelable[]
passé au travers lors du démarrage de l'activité.
La seule solution que j'ai eu jusqu'à présent est d'appeler finish()
puis startActivity()
essentiellement le redémarrage de l'activité avec les nouveaux résultats. Je suis sûr qu'il y a une solution beaucoup plus simple et que j'ai fait quelque chose d'extrêmement noobish.
Est-il une meilleure façon de le faire?
Vous avez raté un. 😛
OriginalL'auteur Samah | 2010-06-22
Vous devez vous connecter pour publier un commentaire.
De cource il est. Juste ajouter configChanges attribut à votre AndroidManifest.xml, comme ça:
L'activité de redémarrer sur de rotation Android
Comment puis-je désactiver le changement d'orientation sur Android?
http://developer.android.com/guide/topics/manifest/activity-element.html#config
pour Android 3.2 (API level 13) et plus récents: android:configChanges="keyboardHidden|orientation|screenSize"
OriginalL'auteur Fedor
Ce que vous décrivez est le comportement par défaut. Vous avez pour détecter et gérer ces événements vous-même en ajoutant:
à votre manifeste, puis les modifications que vous souhaitez gérer. Donc, pour l'orientation, vous pouvez utiliser:
et pour le clavier soit ouvert ou fermé, vous devez utiliser:
Si vous souhaitez gérer à la fois, vous pouvez simplement les séparer avec le tuyau de commande de ce type:
Ce qui va déclencher l'
onConfigurationChanged
méthode quel que soitActivity
vous appeler.Si vous substituez la méthode, vous pouvez passer à les nouvelles valeurs.
Espère que cette aide.
OriginalL'auteur Pratik Butani
Une option à l'aide de
android:configChanges="orientation"
dire android que vous souhaitez pour gérer les changements de configuration vous-même au lieu de l'avoir à recréer de l'Activité. Cependant, cela est déconseillé:Il y a une autre façon de conserver un objet lors d'un changement de configuration: Le ViewModel peut être utilisé pour définir une classe wrapper pour vos données. Chaque instance de l'Activité semble avoir son propre ensemble de ViewModels, accessible par
et si vous utilisez
LiveData
à l'intérieur de, vous pouvez vous abonner aux modifications de données comme indiqué dans la documentation. Voici leur exemple juste au cas où le lien meurt à un certain point:OriginalL'auteur lucidbrot