Configuration modifiée (changement d'orientation) et la destruction des Activités - est-ce la façon dont il est censé fonctionner?
J'ai lu sur comment Android gère "les modifications de configuration" - par la destruction de l'Activité.
Je veux vraiment savoir à partir d'Android Équipe pourquoi c'est. J'aimerais avoir une explication sur la façon dont le raisonnement est allé, parce que je ne la comprends pas. Le fait qu'il agit de cette façon, nous met tous, comme je le vois, dans un monde de douleur.
Permet de supposer que vous avez une Activité qui présente un certain nombre de EditText:s, cases à cocher, etc. Si un Utilisateur commence à remplir ce formulaire avec le texte/données, puis change d'orientation (ou d'obtenir un coup de Téléphone), puis toutes les entrées de l'Utilisateur est allé. Je n'ai pas trouvé une manière de préserver l'état. Qui nous oblige à faire extrêmement douloureux de codage afin de ne pas perdre toutes les données.
Que je vois, vous avez besoin d'un autre "non-Activité" de la classe (ou "la valeur de tenue de classe", peut-être) qui comporte un champ pour chaque "élément de formulaire" (EditText, case à cocher, etc).
Pour chaque "élément de formulaire" qui existe, vous devrez joindre à un Événement comme "onChanged" (ou onTextChanged ou quelque chose comme ça) qui met à jour le champ correspondant dans le "la valeur de tenue de classe", pour vous assurer que pour chaque caractère que vous tapez (dans un EditText par exemple) est enregistré à la fois.
Peut-être vous pouvez utiliser de l'auditeur (comme "onDestroy" ou quelque chose) et puis remplissez la valeur de tenue de classe avec des données.
J'ai aussi trouvé ce morceau de l'info où ils parlent de l'aide Bundle, onSaveInstanceState et onRestoreInstanceState, mais ce que cela signifie que le programmeur a pour enregistrer manuellement et ensuite, plus tard, de remettre les valeurs à la bonne place? Cette approche est un peu moins messier que mes suggestions ci-dessus, mais encore pas très gentil.
Quelqu'un peut me dire que je suis totalement faux et que ce n'est pas comment il fonctionne et que j'ai totalement raté une information capitale?
- Le framework gère automatiquement la sauvegarde et la restauration de certains de l'etat; le reste que vous avez à faire vous-même des méthodes comme le
onPause
etonResume
. Je sais que c'est dur à obtenir autour de votre tête au premier abord, mais vous avez vraiment besoin de connaître le cycle de vie d'une Activité: developer.android.com/guide/topics/fundamentals.html#actlife les modifications de Configuration, comme la rotation de l'écran faut tout recommencer parce qu'ils ont complètement re-mise en page de l'écran. Je suis sûr que quelqu'un va venir et laisser une réponse adéquate trop. 🙂 - Le haut de réponse à la question précédente, vous avez rejoint le résume assez bien. Meilleure façon de voir ce qui est ou n'est pas enregistré lors de la rotation ou d'un appel téléphonique, etc c'est de l'essayer dans l'émulateur!
- Je n'obtiens pas pourquoi re-mise en page a rien à faire avec les données contenues dans les Vues. Android Équipe et tout le monde est toujours de parler sur la façon dont il est important de la séparation de l'interface graphique et le code. Alors pourquoi ne pas simplement redessiner la chose, et de conserver les données? Il y a une telle suggestion ici: stackoverflow.com/questions/456211/... Il suggère de remplacer le onConfigurationChanged et ensuite seulement faire le setContentView, en sautant le onCreate...
Vous devez vous connecter pour publier un commentaire.
Vous devriez lire le Application Des Fondamentaux (plus précisément, L'activité du cycle de vie). Depuis
Activity
s doit être capable d'être tué à tout moment en raison de la mémoire de contraintes, etc. c'est juste une manière plus propre pour gérer les rotations sans ajouter trop de complexité - au lieu de vérifier toutes les ressources pour une autre ressource, la restructuration de la mise en page, etc. il vous suffit d'enregistrer vos données essentielles, de tuer l'activité, de la re-créer, et de charger les données en retour (si vous êtes prêt à traiter avec le supplément de complexité de la gestion de vous-même, vous pouvez utiliseronConfigurationChanged
pour gérer le changement de configuration vous-même.) Cela encourage également les meilleures pratiques - les développeurs d'être préparé pour leurActivity
à être tués pour changement d'orientation, qui a la (bonne) en conséquence d'être préparé pour être tué par la mémoire de contraintes aussi.Le contenu d'un EditText sera automatiquement enregistrée lors de la rotation de l'écran, si vous mettez un android:id de l'attribut. De même, si vous afficher des boîtes de dialogue à l'aide de l'Activité#showDialog, puis les boîtes de dialogue sont reshown pour vous après la rotation.
sur les raisons de la partie courte réponse - parce que vous pourriez avoir les ressources nécessaires pour être changée que vous avez fait pivoter le téléphone. ( Images, mise en page peut être différente, etc )
Sur enregistrez - vous pouvez enregistrer vous des trucs pour regrouper et de le lire.
ou vous pouvez utiliser onRetainNonConfigurationInstance () comme décrit ici
http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance()
Enfin, si vous n'avez pas de quoi vous voulez traiter au cours de la rotation, vous pouvez l'ignorer
cette mise en de votre activité dans le manifeste
En général, je voudrais lire en creux de l'article à partir de l'url ci-dessus à quelques reprises, jusqu'à ce que le cycle de vie est limpide.
@Alex approche ci-dessus m'a indiqué une vraiment, vraiment utile de la solution lors de l'utilisation de fragments:
Fragments généralement obtenir recréé sur la modification de la configuration. Si vous ne souhaitez pas que cela se produise, utilisez
setRetainInstance(true);
dans le Fragment du constructeur(s)Ce sera la cause de fragments conservés au cours de la modification de la configuration.
http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(booléen)